How to change the default stack size on different platforms
2015-08-17 15:36
597 查看
Stack Overflow Problems ======================= This file gives some hints on addressing this problem on different platforms. Under Unix-like systems, programs may throw a "Segmentation Fault" error. This can be due to stack overflow, especially from recursive function calls or huge data sets. In our demo program "Pi" (see "$(CORE_PATH)/progs/pi"), we compute Pi to any number of desired bits or digits. Here are some test results on when stack overflows will occur on different platforms, using their default stack sizes. platform default size # bits # digits =============================================================== SunOS/Solaris 8172K bytes <=39875 <=12003 (Shared Version) Linux 8172K bytes <=62407 <=18786 Windows 1024K bytes <=10581 <=3185 (Release Version) cygwin 2048K bytes <=3630 <=1092 If we now change their stack size to their maximum, our Pi program can compute more bits. platform stack size # bits # digits =============================================================== SunOS/Solaris unlimited >=100,000 30102 Linux 8172K bytes <=33,219,282 <=10,000,000(?) Windows 32768K bytes <=343077 <=12041 How to change the default stack size on different platforms: In general, under Unix-like platforms, the stack size is controlled by environment variable, not the program itself. So you cannot pass any flags to the compilers, like gcc, to setup stack size. Under Windows platforms, the stack size information is contained in the executable files. It can be set during compilation in Visual C++, but this is not available in gcc. Alternatively, Microsoft provides a program "editbin.exe" which can change the executable files directly. Here are more details: SunOS/Solaris: ============== > limit # shows the current stack size > unlimit # changes the stack size to unlimited > setenv STACKSIZE 32768 # limits the stack size to 32M bytes Linux: ====== > ulimit -a # shows the current stack size > ulimit -s 32768 # sets the stack size to 32M bytes Windows (during compilation): ============================= 1. Select "Project->Setting". 2. Select "Link" page. 3. Select "Category" to "Output". 4. Type your preferred stack size in "Reserve:" field under "Stack allocations". eg, 32768 in decimal or 0x20000 in hexadecimal. Windows (to modify the executable file): ======================================= There are two programs included in Microsoft Visual Studio, "dumpbin.exe" and "editbin.exe". Run "dumpbin /headers executable_file", and you can see the "size of stack reserve" information in "optional header values". Run "editbin /STACK:size" to change the default stack size.
from http://www.cs.nyu.edu/exact/core/doc/stackOverflow.txt[/code]
相关文章推荐
- 消除jquery Mobile自动添加的样式
- 定位锚平滑滚动jQuery代码
- 常见26个jquery使用技巧详解(比如禁止右键点击、隐藏文本框文字等)
- angularJS案例:双向数据绑定
- 整理js代码
- JS验证
- caffe源码解析 — solver.cpp
- JQuery EasyUI DataGrid 获取属性值
- 应用before/after伪类时如何CSS命名以及针对ie6/ie7浏览器兼容
- caffe源码解析 — net.cpp
- Js、Jquery字符串数字比较大小。
- Knockout.js Attr绑定
- 修改select默认样式,兼容IE9
- 调用接口并获取放回json值
- HTML 列表
- 使用HTML5 canvas 标签进行图片裁剪、旋转、缩放
- 剑指offer-二叉搜索树与双向链表
- JS,Jquery获取各种屏幕的宽度和高度
- js阿拉伯数字转中文大写 方法重多
- Caffe源码(八):concat_layer 分析