C 这个记忆区域是用来做什么的?

C 这个记忆区域是用来做什么的?,c,virtual-memory,C,Virtual Memory,当我运行我的C程序并检查其/proc/PID/maps文件时,我看到关于可执行文件的三行代码: 1: 2: 3: 我认为第一个存储代码,第三个存储全局变量,但我不知道第二个用于什么。有人能给我解释一下吗?让我试着用一般的方式回答这个问题。可执行文件是一组指令,指导加载程序如何设置程序的地址空间。加载程序将按照这些指令将页面映射到进程地址空间 所有有效页面都将变得可读。因此,您只处理以下各项的组合: R RX RXW R W 可执行(X)和可写(W) 这就给出了可能的 R RX RXW R W

当我运行我的C程序并检查其/proc/PID/maps文件时,我看到关于可执行文件的三行代码:

1:

2:

3:


我认为第一个存储代码,第三个存储全局变量,但我不知道第二个用于什么。有人能给我解释一下吗?

让我试着用一般的方式回答这个问题。可执行文件是一组指令,指导加载程序如何设置程序的地址空间。加载程序将按照这些指令将页面映射到进程地址空间

所有有效页面都将变得可读。因此,您只处理以下各项的组合:

R
RX
RXW
R W
可执行(X)和可写(W)

这就给出了可能的

R
RX
RXW
R W
RXW是不寻常的,但确实存在。我见过在运行时对指令进行编码和解码的应用程序。我们可以忽略这个案例。现实地说,剩下的是:

R      Readonly (Data, such as strings or numeric constants, tabular data)
RX     Code
R W    Read Write (static, global, stack, heap, etc.)
如果你有

 const char something [] = "SOMETHING" ;

文本SOMETHING可能会进入只读页面。

常量数据?文字字符串?可能是任何人。或者没有。我猜:“x”(可执行文件)部分是程序的指令,“w”部分是非常量数据,“r--p”是RO数据。嗯,我认识这些地址,但在与posix无关的操作系统中。你必须提到你用什么来获得准确的答案,加载程序是一个操作系统特定的实现细节。@HansPassant我同意:我们需要一些有关编译器/生产链、生产操作系统、目标平台等的英特尔。
R      Readonly (Data, such as strings or numeric constants, tabular data)
RX     Code
R W    Read Write (static, global, stack, heap, etc.)
 const char something [] = "SOMETHING" ;