我想在堆棧上分配內存。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