スタックにメモリを割り当てたい。
_alloca / allocaを聞いたことがありますが、これらはコンパイラ固有のものであり、私は好きではないことを理解しています。
だから、私は自分自身の解決策を思いついた(それはそれ自身の欠陥があるかもしれない)そして私はあなたにそれをレビュー/改善して欲しいので、私たちはこのコードを機能させるでしょう:
/*#define allocate_on_stack(pointer, size) \
__asm \
{ \
mov [pointer], esp; \
sub esp, [size]; \
}*/
/*#define deallocate_from_stack(size) \
__asm \
{ \
add esp, [size]; \
}*/
void test()
{
int buff_size = 4 * 2;
char *buff = 0;
__asm
{ // allocate
mov [buff], esp;
sub esp, [buff_size];
}
// playing with the stack-allocated memory
for(int i = 0; i < buff_size; i++)
buff[i] = 0x11;
__asm
{ // deallocate
add esp, [buff_size];
}
}
void main()
{
__asm int 3h;
test();
}
VC9でコンパイル。
そこにはどんな欠陥がありますか?たとえば、ESPから差し引くことが「あらゆる種類のCPU」の解決策であるかどうかはわかりません。また、コメントアウトしたマクロを動作させたいのですが、どういうわけか動作しません。