C 编译器是否预分配程序中存在的每个变量?或者他们在程序运行时分配?

问题描述 投票:0回答:1

例如,当我在可能在 main 中调用的函数中定义一个变量(如

int x = 20;
)时,编译器是否已经为该变量分配了堆栈内存?因为,正如我所说,它是一个可以被调用的变量,但也可能不会被调用,并且程序可能会结束并且永远不会调用它。

我正在研究动态内存分配和 malloc 的用例,我一直在阅读一些让我感到困惑的东西,哈哈

c memory stack dynamic-memory-allocation heap
1个回答
0
投票

编译器可以进行各种优化,以删除额外的变量声明或在寄存器中为它们分配空间。否则,就堆栈分配而言,它总是发生在运行时,因为编译器通常无法提前知道函数被调用了多少次。

出于某种原因,糟糕的学习材料往往会简化变量分配,只谈论“堆栈与堆”而忽略其他所有内容。查看 在堆栈和堆上分配了什么?

© www.soinside.com 2019 - 2024. All rights reserved.