今天出现了一些奇怪的事情.当我想用旧的方式在C(C++)中保存一些字符串时,不使用字符串头,我只是创建数组并将该字符串存储到其中.但是,我读到在本地功能范围内C中的任何变量定义最终都会将这些值推送到堆栈中.
因此,字符串实际上比需要的大2倍.因为首先,推送指令位于存储器中,但是当它们被执行(推入堆栈)时,创建了字符串的另一个"副本".首先是推送指令,而不是堆栈空间用于一个字符串.
那么,为什么会这样呢?为什么编译器只是将字符串(或其他变量)添加到程序中而不是在执行时再次创建它们?是的,我知道你不能只在程序块中有一些数据,但它可能只是附加到程序的末尾,之前有一些跳转指令.而且,我们只是指出这些数据?因为它们在执行程序时存储在RAM中.
谢谢.
在C和C++中有几种处理静态字符串的方法:
char string[] = "Contents of the string";
char const *string2 = "Contents of another string";
Run Code Online (Sandbox Code Playgroud)
如果在函数内部执行这些操作,则首先在堆栈上创建一个字符串,就像您描述的那样.第二个只是创建一个指向嵌入到可执行文件中的静态字符串的指针,就像你暗示你想要的一样.