运行时之前初始化的数据段值将存储在哪里?

Aru*_*oor 3 c memory memory-management

通常C代码中的数据段驻留在RAM易失性存储器中,由初始化数据段、未初始化数据段(.BSS)堆栈存储器和堆组成。

  1. 堆栈内存仅在运行时调用例程以及推拉时才会出现。

  2. 堆用于动态内存分配调用malloccalloc并且realloc

  3. .BSS 段仅对 memset 或内部函数有价值,因为它没有任何真正的初始值。

  4. 但是初始化数据段即使是静态的或全局的也必须具有一些值,并且这些值需要存储在非易失性内存位置中,因为它应该在代码运行之前存在。

问题: 这个初始化值存储在非易失性内存位置的哪个部分,我们是否可以使用任何方法来减少它的内存消耗?

nts*_*tty 6

下面两张图有助于理解c二进制的内存布局

在此输入图像描述 在此输入图像描述

参考:C 编译器。内存映射。程序