x86 程序集 (AT&T):如何在运行时为变量动态分配内存?

x86 Assembly (AT&T): How do I dynamically allocate memory to a variable at runtime?

我试图在运行时将一定数量的 space 分配给一个变量。我知道我可以在编译时将恒定数量的 space 分配给一个变量,例如:

.data
    variable: # Allocate 100 bytes for data
        .space 100

但是,如何在运行时将可变数量的 space 分配给变量?例如,在运行时将 space 的 %eax 字节分配给变量?

您不能动态分配静态存储。您需要使用堆栈或 malloc / mmap / 其他(有时称为“堆”)。 (除非你只是在 .bss 中创建一个巨大的数组,你应该把它而不是 .data 放在那里,并且只使用你需要的数量。内核的惰性内存分配可以做到这一点。)

你可以在静态存储中保留一个指针,就像Cstatic int *p;一样,但是你每次访问它时都需要经过额外的间接层。

堆栈上的 variable-sized 分配是编译器为 alloca 或 C99 variable-length 数组所做的。查看编译器输出,了解它们如何将分配大小四舍五入到 16 的倍数以保持堆栈对齐。 (以及他们如何相对于堆栈指针的新值寻址该存储。)