如何解决有没有一种方法可以在GNU C中显式操作堆栈上的变量数据?
(GNU)C提供至少两种机制来处理堆栈上的可变数据-第一种是alloca
函数及其亲戚(例如strdupa
),第二种是“可变长度”数组”功能。
alloca
的问题在于,它似乎并未在内存中分配连续区域-程序
#include <alloca.h>
#include <stdio.h>
int main(void) {
int *a = alloca(sizeof(int));
int *b = alloca(sizeof(int));
printf("b-a = %ld (%ld)",b - a,(char *)b - (char *)a);
return 0;
}
打印
b-a = -4 (-16)
这表明后续分配可能返回四倍的单词(但我希望它是特定于实现的-我仅在基于ARM的手机上尝试了此代码)。
是否有“认可的”方式将单个值压入堆栈,而不是预先分配已知的大小?
我的意思是:
int x = 4;
push(x,sizeof(x))
int y = *(int *) pop(sizeof(x));
assert(x == y);
我正在寻找一种适用于x86和ARM的解决方案。 (我认为研究这些平台的ABI并编写可扩展为可显式操作堆栈指针的程序集的宏是一种选择,但我没有时间自己研究)
解决方法
不,没有一种受支持的方法可以按照该问题的要求在GNU C中显式操作堆栈上的变量数据。没有批准的方法可以将“单个值”压入堆栈。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。