gpt4 book ai didi

c - 什么决定了一个全局定义的字符串是在数据段的读写区还是只读区?

转载 作者:太空宇宙 更新时间:2023-11-04 01:07:06 25 4
gpt4 key购买 nike

来自维基百科:

const char* string = "hello world" makes the string literal "hello world" to be stored in initialized read-only area and the character pointer variable string in initialized read-write area.

  1. 为什么用const 修饰符声明的string 存储在读写 区?
  2. 为什么 "hello world" 存储在只读 区域,而字符串应该是不可变的?
  3. 有没有办法确定(在代码本身中)变量存储在哪个段和区域 (C99)?
  4. 为什么BSS/初始化数据段的只读区和读写区没有分开?
  5. 如果不使用 const 修饰符,上面引用的语句是否仍然正确?如果没有,为什么不呢?

最佳答案

你误会了。该字符串始终是只读的。保存指向字符串指针的变量 string 是一个可变变量,因此它必须是可重新分配的:

const char * string = "abc";

int main()
{
string = NULL; // this must work
}

此外,您应该了解 C 标准不包含有关实际程序实现细节的任何要求,尤其是没有“只读存储器”的概念。他们是否希望提供具有不同访问权限的不同类型的内存,这纯粹是平台(编译器、链接器、二进制格式、加载器)的选择。

关于c - 什么决定了一个全局定义的字符串是在数据段的读写区还是只读区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20460875/

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