【发布时间】:2016-04-21 20:04:27
【问题描述】:
也许我遗漏了一些明显的东西,但不是在运行时当包含变量的函数被调用时局部变量被放置在堆栈上。
因此,当编译器单步执行我们的源代码时,它会将函数的操作放在 .text 段中,但变量在编译时放在哪里,以便它们可以在运行时放入堆栈?谢谢
【问题讨论】:
-
为什么不使用编译器选项来保存汇编代码,看看它是怎么做的?
-
问:在你盖房子之前,你会在衣柜里放些什么? “变量”存储在“内存”中 - 在运行时加载程序之前不存在。 “编译”的是关于如何访问内存的说明。例如,局部变量“x”可能存储在寄存器“堆栈指针”的偏移量“2”处。汇编指令
mov eax, [esp + 2]会将“x”读入寄存器“a”(可能是为了进一步计算)。 -
标准没有要求编译器使用堆栈或其他管理方式进行存储。
-
@Olaf:如果我有
static char buf[10000];(隐式初始化为全零),那么目标文件或可执行文件中的任何位置可能都不会存储 10000 个字节。空间将在程序加载时分配。可执行文件只需要指定多少。 -
C 没有指定任何关于 stack 或 .text 段 的内容。这些是给定编译器的工件。发布感兴趣的编译器。
标签: c++ c function compilation