我想在堆栈上分配内存。
听说过 _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”的解决方案。 另外,我想让注释掉的宏起作用,但出于某种原因我无法做到。
alloca
更加依赖于编译器和平台。 - Mike Seymour