当我们用C编写特定代码时,该代码被分配给数据存储器或代码存储器。何时在运行时或编译时初始化这些内存。有关为什么以这种方式初始化的任何可能的解释?
答案 0 :(得分:0)
大多数.code来自二进制映像(正如您所料),加载程序在程序运行之前会进行一些更改(例如,将导入函数的实际地址写入导入表)。在具有硬件级别内存控制的系统上,加载.code的页面将被标记为只读(如果硬件提供该级别的控制,则可执行。)
.data也来自程序二进制文件,但这些页面标记为读写和不可执行(除了.rodata是只读的)
.bss不是来自二进制文件,它只是被分配并初始化为0(这就是堆栈的存在。
完成加载后,真正的程序入口点运行(不是主要),这将设置环境,运行初始化程序调用主运行析构函数以及平台需要的任何最终拆卸代码。