Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly x86汇编(AT&;T):如何在运行时为变量动态分配内存?_Assembly_X86_Gnu Assembler_Att - Fatal编程技术网

Assembly x86汇编(AT&;T):如何在运行时为变量动态分配内存?

Assembly x86汇编(AT&;T):如何在运行时为变量动态分配内存?,assembly,x86,gnu-assembler,att,Assembly,X86,Gnu Assembler,Att,我试图在运行时为变量分配一定量的空间。我知道我可以在编译时为变量分配恒定的空间,例如: .data variable: # Allocate 100 bytes for data .space 100 但是,如何在运行时为变量分配可变的空间量?例如,在运行时为变量分配%eax字节的空间?您不能动态分配静态存储。您需要使用堆栈,或malloc/mmap/which(有时称为“heap”)。(除非你只是在.bss中创建一个巨大的数组,你应该把它放在那里而不是.data,并且

我试图在运行时为变量分配一定量的空间。我知道我可以在编译时为变量分配恒定的空间,例如:

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

但是,如何在运行时为变量分配可变的空间量?例如,在运行时为变量分配
%eax
字节的空间?

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

您可以将指针保存在静态存储中,如C
static int*p,但是每次访问它时都需要经过额外的间接层


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

您不能动态分配静态存储。您需要使用堆栈,或者malloc/mmap/任何东西。(除非你只是在
.bss
中创建一个巨大的数组,你应该把它放在那里而不是
.data
,并且只使用你需要的量。内核的惰性内存分配可以做到这一点。)@PeterCordes换句话说,按我想要分配给变量的数据量向下推堆栈指针?然后,我如何将数据插入堆栈中新分配的空间,然后知道如何检索数据以供以后使用?