C++ 手动开栈方法
来源:互联网 发布:lol显示网络连接异常 编辑:程序博客网 时间:2024/05/22 16:41
在信息学竞赛中,评测时的栈空间通常和内存限制相同。然而在本机调试时,特别是在 Windows 环境下,常常会遇到因系统限制而导致栈空间不够用的情况(如需要较多层数的递归)。这时,我们就需要手动开大栈空间。开大栈空间可以通过编译器和代码两种方式解决。本文就介绍一下如何通过代码手工开大栈空间。
首先,在程序开头定义以下宏:
#define new_stack(n_byte) \ void *new_stack = malloc(n_byte); \ asm("pushl %%ebp\n\t" \ "movl %%esp, %%ebp\n\t" \ "movl %%eax, %%esp\n\t" \ ::"a" ((int)new_stack + n_byte))#define free_stack() \ asm("leave"::); \ free(new_stack)
因为这段代码有用到 malloc 和 free 函数,所以需要包含头文件 malloc.h。
然后,在 main 函数里按如下方式使用:
int main(){ new_stack(16777216); //16777216 为栈的大小,字节为单位 // ...要用到栈的操作 free_stack(); //释放所开的栈空间 return 0;}
原理的话,就是通过 malloc 申请一块内存,然后将系统栈指针指向申请的内存顶端,从而做到增大栈空间的目的。
在这里要说一下,网上的很多别的教程在这里往往没有释放这一个步骤,这是很不好的一个习惯。当然,释放完之后就不能再进行需要用到很多栈空间的操作了。
阅读全文
0 0
- C++ 手动开栈方法
- C/C++ 手动开O2
- C++/G++ 手动扩栈
- C++手动扩栈方法
- 超强手动扩栈方法
- 手动清除win32.loader.c病毒的方法
- 编译器手动开栈
- 手动开栈
- Dev-cpp 手动扩栈方法
- C/C++手动开大栈区
- 手动创建数据库方法
- 手动安装wincap方法
- javascript手动postback方法
- ArcGIS手动汉化方法
- 常用手动脱壳方法
- struts2手动效验方法
- Ubuntu 手动分区方法
- ModelSim手动配置方法
- Cesium部分控件设置
- Linux 基础命令--长期更新
- 【Android training】使用系统权限
- 设置了table-cell 属性后,用百分比来设置宽度为什么会出现问题
- HDU
- C++ 手动开栈方法
- android获取键盘高度,不能用你打我
- linux系统中rsync+inotify实现服务器之间文件实时同步
- 获取签名证书的SHA1值和MD5值
- testng+maven+java+idea 接口测试入门二:使用reportng优化报告格式
- 前端性能监控
- python采集第一步
- Java循环赋值和循环设置属性问题
- jQuery的callback函数