【问题标题】:How are variable length arrays implemented at the machine code level?如何在机器代码级别实现可变长度数组?
【发布时间】:2021-11-08 03:25:18
【问题描述】:

这是问题:

如何在机器代码(或汇编代码——我不想看到一些二进制代码)级别实现可变长度数组?由于许多局部变量存储在.data 段中,我想必须做一些不同的事情来支持 VLA。

这是我做的一个实验,但没有帮助我找到答案:

我试图通过用 C 编写一段非常短的代码,然后反汇编编译后的输出来获得一些关于这个问题的答案的线索。

代码如下:

  1 int main()                                                                      
  2 {                                                                               
  3                                                                                 
  4     int n = 255;                                                                
  5                                                                                 
  6     int array[n];                                                               
  7                                                                                 
  8     array[0] = 15;                                                                                                  
  9                                                                                 
 10 }

使用gcc main.c 编译。用objdump a.out -M intel -d拆解。请注意,我可能会使用一些更好的编译器选项或 objdump 命令的选项来简化输出,但我不确定这些可能是什么。

产生的输出比我最初预期的要长得多,通过它我没有发现任何能够回答问题的明显内容。

【问题讨论】:

标签: assembly machine-code variable-length-array


【解决方案1】:

VLA 通常存储在堆栈中,就像您使用 alloca() 或 _alloca() 分配它们一样。

https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/alloca

【讨论】:

    猜你喜欢
    • 2012-10-23
    • 2021-10-21
    • 2016-11-09
    • 2022-11-17
    • 1970-01-01
    • 2014-02-06
    • 2021-05-17
    • 2012-01-26
    相关资源
    最近更新 更多