【问题标题】:Where will a constant string be stored in memory?常量字符串将存储在内存中的什么位置?
【发布时间】:2011-10-30 06:41:18
【问题描述】:

有时我们在 c 编程中使用这种类型的代码。

char *p = "Sam";

这里将把常量字符串“Sam”的地址存储在char指针p中。现在在这里
我想问一下山姆要存放在哪里?

【问题讨论】:

标签: c


【解决方案1】:

标准没有规定这一点。通常,字符串文字 ("Sam") 将存储在数据部分的只读页面中。

至于p本身,就看是自动的还是静态的了。

【讨论】:

  • 自动和全局存储在哪里?
  • @Mr.32 自动变量存储在堆栈中。 “全局”或静态变量存储在data(或者可能是bss)中。
  • 在哪个架构上,data 部分有只读页面?在 Linux/ELF 上,字符串文字与其他只读非代码数据一起存储在 rodata 部分中,该部分与 text 位于同一段中。
  • @DietrichEpp 我认为在 x86 上任何页面都可以只读映射?
  • @cnicutar:在 ELF 系统上按部分设置保护(技术上,每个程序头/段,.text.rodata 部分通常共享一个 PT_LOAD 程序头,请参阅readelf -l) 的输出。
【解决方案2】:

字符串“Sam”通常与全局常量存储在全局内存中的同一区域中。

但是,如果您这样做:

char p[] = "Sam";

然后它会在堆栈上。 (作为数组初始化器)

【讨论】:

    猜你喜欢
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    • 2013-04-24
    • 1970-01-01
    • 2023-03-07
    • 2014-05-08
    相关资源
    最近更新 更多