我的理解是,堆栈、虚拟表、静态变量等静态内存都是在“编译时”分配的,而不是在运行时分配的动态内存。但我对这意味着什么感到困惑。据我了解,编译器/链接器解释编写的代码,将其翻译成机器语言,然后将其组装成可执行文件。是否暗示堆栈和所有静态内存都是可执行文件本身的一部分?
问问题
58 次
1 回答
1
我的理解是堆栈之类的静态内存......都是在“编译时”分配的
有点。在编译时确定进入块时如何分配内存。但是分配直到运行时才会发生。
是否暗示堆栈和所有静态内存都是可执行文件本身的一部分?
取决于你的意思。可执行文件确实包含有关将分配的内存的信息。例如,如果编译器知道它需要在堆栈上分配 64 个字节,那么就会有一条指令将帧指针调整 64 个字节(或类似的东西)。
这些都不是由语言本身指定的,所以一切都取决于语言实现来决定,并且在不同的语言实现之间有所不同。我的解释被简化并描述了一种假设的语言实现,并且可能与您使用的任何语言实现都不准确。
于 2021-08-22T23:44:14.990 回答