静态变量的内存分配在编译时完成。
此外,如果我启动同一个应用程序的许多实例,是否会为所有实例创建静态变量的副本,或者在所有实例之间共享单个静态变量? 我想,副本将被创建。但是在这里我怀疑内存是在编译时分配的,并且应用程序的一个实例可以使用该内存,因此其他实例将如何为这些静态变量分配内存。
总的来说,我对“编译时的内存分配”实际意味着什么有疑问?
答案 0 :(得分:0)
您在编译时错误地解释了语句和内存分配问题。这意味着编译器将数据写入它生成的二进制文件,这表示当操作系统加载程序时应该留出内存。
特别是,该字段通常存储在输出文件中称为BSS的部分中。编译器将静态变量声明放在BSS中,OS的程序加载程序在加载程序时读出BSS部分,并在新创建的进程中留出足够的内存来存储BSS。
每次启动程序时,即每次创建新进程时,都会为该进程留出新内存。这包括BSS即静态变量所需的内存。