根据我的理解,数据段由两部分组成。

 1. Initialized segment.
    a. Read Only.
    b. Read/Write.
 2. Uninitialized segment.
  • 读/写存储器用于在文件范围内声明的变量以及静态局部变量。
  • 只读存储器用于字符串等常量。

  • 例子:
    int main(void)
    {
       char* cptr = "Hello"; // The string "Hello" will sit in 'Read only' memory.
       //cptr[2] = 'Z'; // Gives seg fault.
       ...
       return 0;
    }
    

    我的问题是,“只读”内存是否仅用于存储字符串常量?

    最佳答案

    你是对的,几乎......一个程序中的全局静态数据有三种:

  • 初始化数据,只读。不仅为常量字符串保留,还为所有类型的 const 全局数据保留。 它不一定在数据段 中,它可以在程序的文本段(通常是 .rodata 段),因为它通常不能被程序修改。
  • 初始化数据,读写。通常在程序的数据段(.data 段)。
  • 未初始化的数据,读写。通常在程序的数据部分。与之前的不同之处在于可执行文件不包括其内容,仅包括大小,因为它们被初始化为固定的已知值(零),并且可执行文件中没有初始化程序表。通常,编译器/链接器为此目的构造一个段,在该段中它仅累积组件模块所需的大小(.bss 段)。
  • 关于c - 数据段中只读存储器的使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39252410/

    10-11 02:57
    查看更多