C中的动态堆栈分配
发布时间:2020-12-16 10:16:55 所属栏目:百科 来源:网络整理
导读:我想在堆栈上分配内存. 听说_alloca / alloca,我明白这些是编译器特有的东西,我不喜欢. 所以,我想出了我自己的解决方案(这可能有它自己的缺点),我希望你检查/改进它,这样我们就可以一劳永逸地使用这些代码: /*#define allocate_on_stack(pointer,size) __
我想在堆栈上分配内存.
听说_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编译. 你在其中看到了什么缺陷? 解决方法
对不起,但你最好不要使用alloca而不是那种东西.它不仅具有特定的x86,而且如果使用优化编译,它可能会给出意想不到的结果.
alloca受到许多编译器的支持,因此您不应该很快遇到问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- c – 如何绘制近似于原始曲线的曲线
- c – 如何使lambdas与std :: nullopt一起使用
- 未能加载文件或程序集“Newtonsoft.Json, Version=4.5.0.0,
- 在React-native中,如何处理Listview中的复选框?
- ruby – 这一行代码中的点是什么意思:65.rand(10)
- 在ruby中有多个构造函数
- iphone – 是否应该从plist文件中的CFBundleIdentifier中删
- 关于移动设备的Flash播放器,Flash平台,和Flash未来的澄清
- regex – 用于完全匹配单词的正则表达式
- android – 如何在TextFormField中显示/隐藏密码?