【发布时间】:2015-03-01 04:16:48
【问题描述】:
我了解 C++ 程序的内存分配过程。根据我从互联网上得到的信息,对于 C++ 编译器,内存是在编译时为全局变量和静态变量分配的。而动态创建的变量(例如 new/malloc 操作)只有在可执行文件实际运行时才会在内存中分配空间。如果我在这里错了,请纠正我。
那么,如果可执行文件从未被执行,那么之前在编译时为全局和静态变量分配的内存部分是否仍然会一直存在于内存中,直到计算机关闭?如果我们关闭 PC 并重新启动它,然后重新执行可执行文件会怎样?这一次,没有编译过程,操作系统什么时候为这个程序的全局和静态变量分配内存?是在系统启动阶段,还是实际执行可执行文件的时候?
现在将此问题扩展到 PC 中的任何通用程序。例如 Microsoft Word 程序。我们没有自己编码和编译,我们只是从它的安装包中安装它,所以这种情况下没有编译过程(或者安装过程实际上就是编译过程)。假设这些通用程序也需要内存空间用于静态和全局变量,那么操作系统何时为这些程序分配内存?是在我们启动并启动操作系统时,还是在我们实际执行这些程序的可执行文件时?如果操作系统在启动时预先加载所有这些静态变量,这样就可以解释为什么操作系统启动过程需要一些时间,但如果系统中安装的90%的程序都不会被加载,这似乎是一种内存资源的浪费。每次用户开机并使用他的 PC 时执行。
【问题讨论】:
-
编译时没有分配内存。内存分配从运行时开始。
-
我认为这个问题很清楚,并且与编程有关,如果有点漫不经心和幼稚(但没关系)。这背后显然是有想法的,这对于这些天这里的大多数问题来说都是可以说的。比“为什么我的程序崩溃”要好得多。不过我可能有点偏见。
-
@JasonC:它太宽泛了。 OP应该读一本开花的书。我们不能在这里教所有编译器是如何工作的。可能有“背后的想法”,但零研究。
-
好吧,我投了我的重新开始投票。剩下的就看命运了。祝你好运,勇敢的问题!
标签: c++ memory allocation