内存分配给静态变量(编译时间内存分配)

时间:2014-08-09 05:29:27

标签: compile-time static-memory-allocation

静态变量的内存分配在编译时完成。

  1. 如果我编译应用程序的次数,每次都会分配内存吗?
  2. 如果是,那么到时候,它可能会占用我计算机的完整内存。实际上,它永远不会发生,怎么样?
  3. 此外,当我们在其他计算机上运行相同应用程序的可执行文件时,它会成功运行。它如何在其他计算机的内存中找到静态变量,如果它是在其他计算机上编译的。
  4. 此外,如果我启动同一个应用程序的许多实例,是否会为所有实例创建静态变量的副本,或者在所有实例之间共享单个静态变量? 我想,副本将被创建。但是在这里我怀疑内存是在编译时分配的,并且应用程序的一个实例可以使用该内存,因此其他实例将如何为这些静态变量分配内存。

    总的来说,我对“编译时的内存分配”实际意味着什么有疑问?

1 个答案:

答案 0 :(得分:0)

您在编译时错误地解释了语句和内存分配问题。这意味着编译器将数据写入它生成的二进制文件,这表示当操作系统加载程序时应该留出内存。

特别是,该字段通常存储在输出文件中称为BSS的部分中。编译器将静态变量声明放在BSS中,OS的程序加载程序在加载程序时读出BSS部分,并在新创建的进程中留出足够的内存来存储BSS。

每次启动程序时,即每次创建新进程时,都会为该进程留出新内存。这包括BSS即静态变量所需的内存。