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