今天我想到了一件奇怪的事。当我想以旧方式在 C (C++) 中保存一些字符串时,不使用字符串 header ,我只是创建数组并将该字符串存储到其中。但是,我读到 C 中函数局部范围内的任何变量定义最终都会将这些值压入堆栈。
因此,字符串实际上比需要的大 2*。因为首先,压入指令位于内存中,但是当它们被执行(压入堆栈)时,会创建字符串的另一个“副本”。首先是推送指令,然后堆栈空间用于一个字符串。
那么,为什么会这样呢?为什么编译器不直接将字符串(或其他变量)添加到程序中,而是在执行时再次创建它们?是的,我知道你不能只在程序 block 中包含一些数据,但它可以附加到程序的末尾,之前有一些跳转指令。而且,我们只是指向这些数据?因为它们是在程序执行时存储在RAM中的。
谢谢。
最佳答案
在 C 和 C++ 中有几种处理静态字符串的方法:
char string[] = "Contents of the string";
char const *string2 = "Contents of another string";
如果您在函数内执行这些操作,首先会在堆栈上创建一个字符串,就像您描述的那样。第二个只是创建一个指向嵌入到可执行文件中的静态字符串的指针,就像你暗示你想要的那样。
关于c - 在内存中保存变量,C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2567948/