如何解决x86 AssemblyAT&T:如何在运行时动态地将内存分配给变量?
我正在尝试在运行时为变量分配一定的空间。我知道我可以在编译时为变量分配恒定的空间,例如:
.data
variable: # Allocate 100 bytes for data
.space 100
但是,如何在运行时为变量分配可变数量的空间?例如,在运行时为变量分配%eax
个字节的空间?
解决方法
您不能动态分配静态存储。您需要使用堆栈,或使用malloc / mmap /之类的东西(有时称为“堆”)。 (除非您只是在.bss
中创建一个巨大的数组,而不应该在.data
中放置此数组,并且仅使用您需要的大量数组。内核的惰性内存分配就可以了。)
您可以将指针保留在静态存储中,例如C static int *p;
,但随后每次访问时都需要遍历额外的间接层。
编译器对alloca
或C99可变长度数组所做的工作是在堆栈上进行可变大小的分配。查看编译器输出,了解如何将分配大小四舍五入到16的倍数以保持堆栈对齐。 (以及它们如何相对于堆栈指针的新值来寻址该存储。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。