打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
各平台stack大小及设置
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.
本文摘自(cs.nyu.edu/exact/core/doc/stackOverflow.txt
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Java Performance Tuning GC调优
Tool之Simulator
在非控制台程序中打印出printf
Oracle汉字乱码问题原因及解决方法
stm32堆栈如何设置,地址如何分配
A Collection of Examples of 64
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服