全局变量似乎不占用任何内存空间

7 c memory global-variables

我想准确理解全局变量在程序中的存储位置.在堆栈上?在堆上?别的地方?

所以我写了这个小代码:

int global_vector[1000000];
int main () {
    global_vector[0] = 1; // just to avoid a compilation warning
    while(true); // to give me time to check the amount of RAM used by my program
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

无论我做多大global_vector,程序只使用非常少量的RAM.我不明白这个的原因.有人可以解释一下吗?

tem*_*def 11

这完全取决于实现,但通常全局变量存储在与堆栈和堆分开的特殊内存段中.此内存可以作为固定大小的缓冲区分配给可执行文件本身,也可以分配给操作系统启动时提供给程序的段.

您没有看到内存使用率上升的原因可能与操作系统处理虚拟内存的方式有关.作为优化,操作系统实际上不会为该巨型阵列提供任何内存,除非您实际使用它.尝试将程序更改为for循环遍历数组的整个内容,看看是否会导致RAM使用率上升.(这也有可能是你的编译器优化是消除巨阵,因为它几乎完全未使用的.把一个循环来读/写所有的值也可能迫使编译器,以保持它).

希望这可以帮助!


SLa*_*aks 5

优化器可能完全删除了数组,因为你从不使用它.

  • @curvature你所做的没有可观察到的影响,因此编译器可以删除它. (2认同)