【发布时间】:2020-08-02 11:26:30
【问题描述】:
到目前为止,我知道以下在 C++ 中使用字符串的方法(尽管其中一些来自 C)
string string1 = "Hello";
char string2[] = "Hello";
char string3[] = {'H', 'e', 'l', 'l', 'o', 0};
const char *string4 = "Hello";
- 我发现第一种方法最方便,因为它支持多种方法并具有重载运算符。但我相信这也使它在性能方面的优化最少,是这样吗?
- 就性能/速度而言,哪种方法最好?
- 哪些分配在堆栈上,哪些分配在堆上?我的意思是我没有看到任何
new关键字,但我的直觉告诉我不是这样。
【问题讨论】:
-
计算机速度非常快。便利性被低估了,效率被高估了,尤其是初学者。问题三的答案是堆栈(可能),堆栈,堆栈,两者都不是。
-
对“可能”答案的解释是大多数字符串实现都使用短字符串优化,这意味着短字符串在堆栈上分配。如果字符串很大,那么它将被堆分配。
-
1.这是不正确的。 2. 目的是什么?只是坐在那里,还是用它做点什么? 3.也许栈也许堆;堆栈(如果在函数的上下文中);堆栈(
string3与string2完全相同);指针是栈,指向的数据既不是栈也不是堆。 -
std::string是动态的,因此它可能会将字符串保存在heap -
好吧,所以我假设性能不会有太大差异,因此使用第一种方法是最好的(至少在大多数情况下)。虽然我不确定我是否得到你们所说的
string4
标签: c++ memory-management c-strings stdstring