gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 21:16:26 25 4
gpt4 key购买 nike

我有以下与 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com