声明带有指针的字符串文字比声明常量数组更有效吗?

如果我想存储一个常量字符串,

const char array[] = "Some string literal.";

C引子加书说

then the quoted string is stored in a data segment that is part of the executable file. Memory for the array is allocated only after the program begins running. At that time, the quoted string is copied into the array.

这是否意味着内存为字符串文字分配了两次?

另一方面,当使用指针声明时,它仅为指针变量留出存储空间并将字符串文字的地址存储到其中.

const char *pt = "Some string literal.";

这意味着只有一个字符串文字的副本,并且使用字符串文字声明指针比数组的内存效率更高?

最佳答案
在第一种情况下,字符串的数据存储在可执行文件中,并在加载程序后存储在内存中.所以它是“分配两次”,但是在非常不同的存储介质(磁盘和内存)中.

然而,对于第二种情况也是如此.字符串文字需要在磁盘上的可执行文件中存储一次,并在程序运行时存储在内存中.

不同之处在于实现细节,即在第一种情况下,存储器中的字符串存储在堆栈上或存储在某个全局可修改数据存储器段中.在第二种情况下,字符串通常与代码一起存储.

因此,如果在第一种情况下只有一个字符串实例,则“内存效率”没有区别.

转载注明原文:声明带有指针的字符串文字比声明常量数组更有效吗? - 代码日志