程序的靜態(tài)數(shù)據(jù)量大的時候,有時候會出現(xiàn)棧溢出問題,往往是程序還沒運(yùn)行算法呢,就down掉了,比如你在創(chuàng)建包含大數(shù)組的類(或數(shù)據(jù))的時候,棧就溢出了。這是由于系統(tǒng)分配給程序的棧空間太小。
一種方法,就是不要靜態(tài)分配,用new動態(tài)創(chuàng)建,是從堆中分配的,堆的空間足夠大,不過記得寫析構(gòu)函數(shù),delete你申請的堆空間。其實(shí)這樣也挺方便,類結(jié)束的時候會自動調(diào)用析構(gòu)函數(shù)釋放空間。養(yǎng)成"不在棧上定義大數(shù)組/大對象"的好習(xí)慣很重要,否則再大的棧也會被撐爆的。
當(dāng)然,如果你不喜歡new,delete的話,還是靜態(tài)分配(畢竟靜態(tài)分配有很多好處),那么可以通過改變默認(rèn)棧空間來解決。
LINK的/STACK選項(xiàng)
/STACK :reserve[,commit]
reserve:棧總大小
commit:程序開始時系統(tǒng)提供的實(shí)際內(nèi)存量
缺省:1M,8K
參數(shù)為0取缺省值
今天在VC++.NET中運(yùn)行聚類程序,老是說Stack OverFlow, 后來才發(fā)現(xiàn)是棧空間太小了。
單單保存100個網(wǎng)頁的數(shù)據(jù)量就比較大了。
把堆棧的大小已經(jīng)設(shè)置為:
堆棧保留大小為:100000000;
堆棧提交大小為: 100000000;
就沒問題了。
設(shè)置:項(xiàng)目-> 屬性-> 鏈接器-> system-> 堆棧保留大小/堆棧提交大小