【问题标题】:How Compiler allocate memory on stack编译器如何在堆栈上分配内存
【发布时间】:2015-06-30 11:22:11
【问题描述】:

如果我在函数中的局部变量很少 -

void fun()
{
  int a,b,c,d,e,f,g;
} 

编译器是否为每个变量一个接一个地分配内存?如是 为什么编译器不一次读取所有变量然后为 他们一口气?

【问题讨论】:

标签: c++ c


【解决方案1】:

编译器不会为它们中的任何一个分配内存。你的源代码和你的最终可执行文件之间的区别比这更复杂。简而言之,如果这些变量实际上最终物理地存在于执行计算机上(这绝不是肯定的:可以优化掉很多!),它们的大小只会接近堆栈帧的大小,这在很大程度上是“构造”仅仅依靠每当进入/离开这个范围时堆栈指针增加多远。

从这个意义上说,编译器“一次性为它们分配内存”。但基本不会。 :-)

【讨论】:

  • 赞成这个答案值得一票googolplexian,因为它发现了一个不为人知的隐藏秘密
  • 请注意,由于这些是普通整数,编译器更有可能决定将这些变量分配到 CPU 寄存器中。虽然原理相同,但编译器不会“分配”它们,而是创建一个机器代码指令“将 a 存储在寄存器 r 中”作为程序的一部分。
  • @Lundin 非常底层相关的推理,我喜欢这样。我认为它们会自动存储在程序的内部存储器中,所以是的。你有邮箱吗?
猜你喜欢
  • 2014-12-31
  • 1970-01-01
  • 2018-04-10
  • 1970-01-01
  • 2012-01-07
  • 2016-07-07
  • 2011-09-14
  • 2018-07-24
  • 2012-12-06
相关资源
最近更新 更多