c - 在内存中保存变量,C++

标签 c string arrays

今天我想到了一件奇怪的事。当我想以旧方式在 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/

相关文章:

c - C 中的动态双数组

c - C语言中的字符串拆分

python - 使用正则表达式将每行的第一个字母大写

c# - 如何从问题列表中结束数组

c++ - 不明白 array-1 是什么意思

c++ - 为什么 C++11 不支持 C99 指定的初始化列表?

c - 带有代码块的段错误 11

c - 在 Linux + Intel 驱动程序上启用合成时,OpenGL 应用程序会产生奇怪的效果

在 C 中传递和修改 char 指针之间的混淆(引用与值)

arrays - Go 中的嵌套循环数组的行为不像其他语言的数组