我想在堆栈上分配内存。C++中的动态堆栈分配
听说_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”的解决方案。 另外,我想使注释掉的宏能够工作,但由于某些原因,我无法工作。
“it's”=>“其” – 2010-05-21 14:33:17
注意:“__asm int 3h”用于那些要调试的人,用Olly-Debugger说...在那里你可以看到堆栈“非常明确”。 – Poni 2010-05-21 14:35:03
哈哈康拉德 - 嗯,大家 - 请不要复习/提高我的语法技能,因为我已经放弃了他们(: – Poni 2010-05-21 14:36:31