修改 堆栈大小 普适性方案总结 (跨平台 windows linux 栈设置大小)
http://www.cnblogs.com/titer1/archive/2012/03/31/2427436.html
棧的大小可以修改的。在應用程序我們經常需要定義大的數組,數組定義成局部變量非靜態變量,那么數組就會在棧上分配,當數組超過默認棧的大小時,會引起非常內存訪問。那么如何修改系統默認的棧的大小呢。
?
一般,在Unix-like平臺,棧的大小不是由程序自己來控制的而是由環境變量來控制的,所以就不能通過設置編譯器(像gcc)的任何編譯標志來設置棧的大小;
//66上面這種說法,是不是,改變了環境,只要不更改回來,所有的相關程序都會受影響。
//而windows?影響范圍更小,可以只是當前程序。
//思考,待確認?
?
在windows平臺下,棧的大小的信息是包含在可執行文件中的。它可以在Visual C++的編譯過程中設置,但是在gcc中是不可行的。
?
//66待確認??gcc
?
也可以用Microsoft提供的一個叫作:”editbin.exe“程序來直接修改可執行文件的棧的大小。
?
?
在一般情況下, 不同平臺默認棧大小如下(僅供參考)
SunOS/Solaris 8172K bytes (Shared Version)
Linux 10240K bytes
Windows?1024K?bytes (Release Version)
AIX 65536K bytes
?
?
如果定義大數組的情況下,那就需要修改默認的棧大小,下面給出幾個平臺的修改方法:
1.SunOS/Solaris系統:
limit # 顯示當前用戶的棧大小?
unlimit?# 將當前用戶的棧大小改為不限制大小
setenv STACKSIZE 32768 #設置當前用戶的棧大小為 32M bytes
?
?
2.Linux系統:
ulimit -a #顯示當前用戶的棧大小
ulimit -s 32768 #將當前用戶的棧大小設置為32M bytes
?
//66上面那個變量?在?淘寶博客?經常出現。
?
3. Windows (在編譯過程中的設置):
1). 選擇 "Project->Setting".
2). 選擇 "Link".
3. 選擇 "Category"中的 "Output".
4. 在 "Stack allocations"中的"Reserve:"中輸棧的大小,例如: 32768?
?
總結
以上是生活随笔為你收集整理的修改 堆栈大小 普适性方案总结 (跨平台 windows linux 栈设置大小)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: malloc线程安全
- 下一篇: glibc malloc