【发布时间】:2019-04-27 09:31:57
【问题描述】:
C/C++ 编译器如何处理固定堆栈动态数组和堆栈动态数组。 通过查看汇编代码中这些变量的地址,我了解了静态变量与堆栈动态变量的不同之处。
【问题讨论】:
-
C++ 不支持标准中的 stack dynamic arrays。虽然有编译器扩展。
标签: c++ c compiler-construction
C/C++ 编译器如何处理固定堆栈动态数组和堆栈动态数组。 通过查看汇编代码中这些变量的地址,我了解了静态变量与堆栈动态变量的不同之处。
【问题讨论】:
标签: c++ c compiler-construction
正如评论中所说,堆栈来自 C++ 标准的动态数组。
当没有本地/堆栈动态数组时,堆栈中每个局部变量的位置是与当前函数关联的帧中的常量偏移量
当在局部变量中引入动态数组时,编译器必须考虑数组的大小,以访问放置在数组“之后”的局部变量,以便在没有它的情况下将其添加到常量偏移量处。为此,我们可以很容易地想象元素的大小/数量也放置在数组“之前”的堆栈中,允许生成的代码读取它以进行偏移计算。很明显,动态数组对性能有影响
【讨论】: