何时将内存分配给变量

时间:2014-08-08 16:09:29

标签: memory

这三句对我来说有点混乱。

  

1.在变量初始化期间分配内存。

     

2.Memory在声明变量时分配。

     

3.Memory在变量定义期间分配。

欢迎任何解释!非常感谢

2 个答案:

答案 0 :(得分:1)

对于编译语言,我不会说这些。

全局变量在编译时被赋予内存偏移量,后者在链接时被赋予绝对值。局部变量在堆栈帧中分配了一个偏移量。

在加载时(从磁盘加载程序执行时),所有全局变量的内存空间都映射到进程的内存空间,并且静态地隐式分配一些空间变量;变量已声明为初始值,在此刻设置。堆栈空间也是保留的。

在运行时,当您输入一个函数时,堆栈框架将被压入堆栈,其中包含局部变量的空间。

在任何情况下都不是变量"分配内存"在运行时,初始化,声明和定义都没有任何分配效果。

int g= 1;

void main()
{
  int l= 2;
}

第一个变量定义g导致四个字节的全局空间被映射(除了所有其他全局变量之外),并在加载程序时由加载器初始化为1。第二个变量定义l导致在main调用的堆栈帧上映射四个字节(除了所有本地变量之外),并在输入函数时自动设置为2

未初始化的变量具有未定义的值,直到您为它们分配一些。这是因为运行时环境只是将内存空间与之前不可预测的内容一起占用,以节省初始化成本。

答案 1 :(得分:0)

它很大程度上取决于您使用的编程语言,以及声明此变量的位置。

例如,在Objective Pascal中,如果声明全局应用程序变量,内存管理器将在应用程序启动时为内存管理器保留此变量的内存。

如果在Objective Pascal内存中声明了局部变量(变量在方法中声明),则当代码进入此方法时,内存将被保留。

当为某个变量保留内存时,变量doesent必须被初始化。它几乎取决于变量类型,声明它的位置以及你正在使用的内存管理器。