当我们用C编写特定代码时,该代码将分配给数据存储器或代码存储器。何时在运行时或编译时初始化这些内存。为什么以这种方式初始化它们的任何可能解释?

最佳答案

大部分.code来自二进制映像(如您所料),加载程序在程序运行之前确实进行了一些更改(例如,将导入函数的实际地址写入到导入表中)。在具有硬件级别的内存控制的系统上,.code加载到的页面将标记为只读(如果硬件提供了该级别的控制,则该页面是可执行的)。

.data也来自程序二进制文件,但这些页面被标记为可读写且不可执行(.rodata为只读)

.bss不是来自二进制文件,它只是被分配并初始化为0(这是堆栈的生命。

完成加载后,实际的程序入口点将运行(不是main),这将设置环境,运行初始化程序,调用main运行析构函数以及平台所需的任何最终拆卸代码。

关于c - 代码存储器和数据存储器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47782524/

10-13 06:52