gpt4 book ai didi

c - GCC如何实现变长数组?

转载 作者:行者123 更新时间:2023-11-30 16:51:01 25 4
gpt4 key购买 nike

GCC 如何实现可变长度数组 (VLA)?这样的数组本质上是指向动态分配的存储的指针,例如 alloca 返回的存储空间吗?

我能想到的另一种选择是,将这样的数组分配为函数中的最后一个变量,以便在编译时知道变量的偏移量。然而,在编译时第二个 VLA 的偏移量将再次未知。

最佳答案

下面是以下示例行的分配代码(x86 - x64 代码类似),取自 some GCC docs for VLA support :

char str[strlen (s1) + strlen (s2) + 1];

其中 strlen (s1) + strlen (s2) + 1 的计算在 eax 中(GCC MinGW 4.8.1 - 无优化):

mov edx, eax
sub edx, 1
mov DWORD PTR [ebp-12], edx
mov edx, 16
sub edx, 1
add eax, edx
mov ecx, 16
mov edx, 0
div ecx
imul eax, eax, 16
call ___chkstk_ms
sub esp, eax
lea eax, [esp+8]
add eax, 0
mov DWORD PTR [ebp-16], eax

所以它看起来本质上是alloca()

关于c - GCC如何实现变长数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41924270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com