【问题标题】:stack dynamic and stack dynamic array堆栈动态和堆栈动态数组
【发布时间】:2019-04-27 09:31:57
【问题描述】:

C/C++ 编译器如何处理固定堆栈动态数组和堆栈动态数组。 通过查看汇编代码中这些变量的地址,我了解了静态变量与堆栈动态变量的不同之处。

【问题讨论】:

  • C++ 不支持标准中的 stack dynamic arrays。虽然有编译器扩展。

标签: c++ c compiler-construction


【解决方案1】:

正如评论中所说,堆栈来自 C++ 标准的动态数组。

当没有本地/堆栈动态数组时,堆栈中每个局部变量的位置是与当前函数关联的帧中的常量偏移量

当在局部变量中引入动态数组时,编译器必须考虑数组的大小,以访问放置在数组“之后”的局部变量,以便在没有它的情况下将其添加到常量偏移量处。为此,我们可以很容易地想象元素的大小/数量也放置在数组“之前”的堆栈中,允许生成的代码读取它以进行偏移计算。很明显,动态数组对性能有影响

【讨论】:

    猜你喜欢
    • 2012-12-20
    • 2014-08-15
    • 1970-01-01
    • 2019-06-19
    • 2019-05-17
    • 1970-01-01
    • 2023-03-16
    • 2016-03-15
    • 2019-02-02
    相关资源
    最近更新 更多