Pon*_*oni 3 c++ stack allocation
我想在堆栈上分配内存.
听说_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();
}
Run Code Online (Sandbox Code Playgroud)
用VC9编译.
你在其中看到了什么缺陷?例如,我不确定从ESP中减去"任何类型的CPU"的解决方案.此外,我想使注释掉的宏工作但由于某种原因我不能.
小智 8
对不起,但是你最好不要使用alloca而不是那种东西.它不仅具有特定的x86,而且如果使用优化编译,它可能会给出意想不到的结果.
alloca受到许多编译器的支持,因此您不应该很快遇到问题.
| 归档时间: |
|
| 查看次数: |
1181 次 |
| 最近记录: |