对于这个表达式,我有点困惑:
char *s = "abc";
字符串字面量是在堆栈上创建的吗?
我知道这个表达式
char *s = (char *)malloc(10 * sizeof(char));
在堆上分配内存,这个表达式
char s[] = "abc";
在堆栈上分配内存,但我完全不确定第一个表达式的作用。
对于这个表达式,我有点困惑:
char *s = "abc";
字符串字面量是在堆栈上创建的吗?
我知道这个表达式
char *s = (char *)malloc(10 * sizeof(char));
在堆上分配内存,这个表达式
char s[] = "abc";
在堆栈上分配内存,但我完全不确定第一个表达式的作用。
通常情况下,字符串字面量"abc"
将被存储在可执行文件的只读部分。指针s
将在栈上创建(或放置在寄存器中,或仅进行优化)- 并指向那个生存在“其他地方”的字符串字面量。
"abc"
如果启用了字符串池化,字符串字面量将存储在程序的__TEXT,__cstring
(或rodata
或取决于对象格式的其他地方)部分。这意味着它既不在堆栈上,也不在堆中,而是停留在靠近代码的只读内存区域。
char *s = "abc";