【问题标题】:When is a memory allocated to a variable [closed]何时将内存分配给变量[关闭]
【发布时间】:2014-08-08 16:09:28
【问题描述】:

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

1.内存是在变量初始化时分配的。

2.在声明变量时分配内存。

3.内存是在定义变量时分配的。

欢迎任何解释!非常感谢

【问题讨论】:

  • 你问的是什么语言?
  • #Chuck...这是 C ..对不起! :)

标签: memory


【解决方案1】:

如果是编译语言,我不会说这些。

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

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

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

在任何情况下,变量都不会单独“分配内存”,初始化、声明和定义都不会在运行时产生任何分配效果。

int g= 1;

void main()
{
  int l= 2;
}

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

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

【讨论】:

  • 很好的解释.. 非常感谢!
【解决方案2】:

这很大程度上取决于您使用哪种编程语言,以及该变量在哪里声明。

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

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

当为某个变量保留内存时,该变量不一定会被初始化。它主要取决于变量类型、声明的位置以及您使用的内存管理器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2020-05-28
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    相关资源
    最近更新 更多