alloca
( GNU) C では、スタック上の変数データを操作するためのメカニズムが少なくとも 2 つ提供されています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)
これは、後続の割り当てが 4 倍の単語を返す可能性があることを示唆しています (ただし、実装固有であると予想されます。このコードは、ARM ベースの電話でのみ試しました)。
事前にわかっているサイズでそれらを割り当てるのではなく、スタックに単一の値をプッシュする「認可された」方法はありますか?
私は次のようなことを意味します:
int x = 4;
push(x, sizeof(x))
int y = *(int *) pop(sizeof(x));
assert(x == y);
x86 と ARM の両方で機能するソリューションを探しています。(これらのプラットフォームの ABI を研究し、スタック ポインターを明示的に操作するアセンブリに展開されるマクロを作成することはオプションだと思いますが、自分でこれを調べる時間はありません)