我有以下与 C 语言相关的问题:
- 为什么
char *p="Harish"
存储在.rodata
段中? - 为什么
int *p=90
存储在堆栈上?
最佳答案
当你这样做时:
char *p = "Harish";
您正在执行以下操作:
- 您正在堆栈上创建一个名为
p
的指针。 - 将其初始化为文字字符串“Harish”的地址。该字符串必须存储在函数退出时不会消失的某个地方,因此它存储在只读数据段中(它是一个常量字符串,因此不需要可写)。
相比之下,当你这样做时:
int *p = 90;
你只是创建了一个指针,但没有让它指向任何东西。您只需将指针设置为指向地址90
。与上面的情况一样,指针位于堆栈中。 .rodata
段中没有任何内容,因为声明没有为其创建任何指向的内容。
关于c - 为什么指向字符串的指针存储在 .rodata 中,而指向 int 的指针却在堆栈上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27466463/