0

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

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

    总的来说,我怀疑“编译时的内存分配”到底是什么意思?

4

1 回答 1

0

您误解了“编译时内存分配”的说法。这意味着编译器将数据写入它生成的二进制文件,表明在操作系统加载程序时应该留出内存。

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

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

于 2014-08-09T05:43:03.393 回答