c - 为什么指向字符串的指针存储在 .rodata 中,而指向 int 的指针却在堆栈上?

标签 c assembly

我有以下与 C 语言相关的问题:

  1. 为什么 char *p="Harish" 存储在 .rodata 段中?
  2. 为什么int *p=90存储在堆栈上?

最佳答案

当你这样做时:

char *p = "Harish";

您正在执行以下操作:

  1. 您正在堆栈上创建一个名为 p 的指针。
  2. 将其初始化为文字字符串“Harish”的地址。该字符串必须存储在函数退出时不会消失的某个地方,因此它存储在只读数据段中(它是一个常量字符串,因此不需要可写)。

相比之下,当你这样做时:

int *p = 90;

你只是创建了一个指针,但没有让它指向任何东西。您只需将指针设置为指向地址90。与上面的情况一样,指针位于堆栈中。 .rodata 段中没有任何内容,因为声明没有为其创建任何指向的内容。

关于c - 为什么指向字符串的指针存储在 .rodata 中,而指向 int 的指针却在堆栈上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27466463/

相关文章:

c - scanf 没有响应?

c - 动态分配 2 个指针时出错

组装我们需要结局吗?

C 共享内存现有标志?

c - 如何将 pgm_read_byte 宏(AVR)移植到 8051

php - PHP如何处理变量?

数据段中的汇编函数数据排列

assembly - 如何避免使用PUSH而不使用POP?

ios - 什么是 dispatch_atomic_maximally_synchronizing_barrier();意思是?

c++ - 方法最开始的段错误