例如,
{ // local stack frame C
cout << "AAAAA" << endl;
cout << "AAAAA" << endl;
cout << "BBBBBBBBBB" << endl;
cout << "BBBBBBBBBB" << endl;
}
此处,编译时在数据段中创建了两个字符串(大小为 6 的字符串 A 和大小为 11 的字符串 B)。
如果我像上面那样在一个 block 中写一个字符串文字,
数据段中的字符串A和B在编译时被两个复制到本地栈帧C中。
所以 6 * 2 + 11 * 2 = 34。
一共会占用34个字节的本地栈内存。
我理解的对吗?
最佳答案
字符串不会复制到本地栈帧。相反,您只是将指向具有静态存储持续时间的字符串文字的指针传递给 cout <<
.由于此指针在编译时具有固定值,因此在编译时也不太可能占用任何堆栈内存。
栈帧通常也是按函数定义的,而不是按 block 定义的。
如果您将要显示的 block 编译为启用了优化的函数,那么它可能不会为局部变量或临时变量使用任何堆栈空间。
关于c++ - 如果我在 block 中写入字符串文字,是否会从数据部分复制整个字符串数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59310065/