導航:首頁 > 源碼編譯 > 編譯器可以修改棧大小嗎

編譯器可以修改棧大小嗎

發布時間:2022-05-31 18:28:41

『壹』 程序設計中,堆和棧比較重要。棧存取速度大於堆,而且編譯器可以修改棧大小,這個值可以隨意設置嗎

學習電腦編程多年了,在程序設計方面也算有一番見解,希望這些經驗能對題主有所幫助。

『貳』 C++小問題,幫幫我

數組太大了。。。
你要改進演算法啊。比如寫入文件,從文件里讀。或用動態分配內存。
定義的數組內存是連續分配在棧空間的,由於編譯器的原因,可能棧空間預定義的沒這么大,有些編譯器可以修改棧空間大小,但是不建議這么做。棧比堆小,用動態分配內存的話,從堆中創建空間的話就好很多了。如果你的數組再大,甚至超過了堆的大小,那就只能從文件讀取。

『叄』 devc如何擴大棧容量

你的程序如果真需要那麼大的靜態數組(棧分配),那恐怕你的程序應該重新設計一下。 比如用動態的(heap,堆)。 - 程序的「棧」stack不是語言本身控制的,而是操作系統決定的,雖然編譯器可以有些設置,但調節的范圍也有限。Windows下預設的stack大小是1M。像VC編譯器,可以設置修改,也就到32M。 有工具軟體,可以修改已編譯後的exe文件的stack限制(比如editbin),也無外乎修改PE的數據格式,以通知操作系統載入程序時的stack分配而已。

VC也好,Dev-C也好,只是一個IDE,編譯環境,編譯器選項可修改的范圍有限,最後還是受限於操作系統。

如果是純C,建議用malloc這種heap分配方式,得到大數組;而如果是C++的話,可以用STL的容器,比如vector<>或stack<>來模擬你需要的「棧」。 -- 這是可移植的方法;如果是系統相關的,那麼Windows下的SDK API比如VirtualAlloc等內存管理函數,可以直接用於程序的內存分配,但那也是heap上,而非stack。

『肆』 編譯器可以修改棧大小,這個值可以隨意設置嗎

你說的那個默認1M的棧,應該指的是call stack(函數調用使用的棧)。這個棧用來存放函數調用時所傳遞的參數(並非所有參數都通過棧傳遞),棧指針,return address,寄存器的備份,還有每層函數的local variable。
1M大多數情況都是夠用的,如果用完可能會發生非法訪問等錯誤。可能會用完1M的情況:某個被調用的函數申請了一個很大的local variable,比如直接在棧上開個大數組之類的;還有就是遞歸調用,遞歸層數多了後很容易就用完1M。所以遞歸一般不要亂用。

『伍』 c語言爆棧如何修改

這個棧大小是編譯器里的參數,你必須到你的編譯環境里找到設置的地方,把上限值調大。
如果你找不到這個設置菜單的話,代碼改用堆空間,而不用棧空間,也能實現你的功能的。一般編程的時候,這么大片的連續空間的使用都會選擇用堆,而不用棧,因為棧的空間很有限。
使用堆的方法就是調用malloc函數申請空間。

『陸』 函數調用棧不夠應該怎麼辦

調整一個C程序棧的默認大小可以使用編譯選項、連接選項或使用#pragma指令,具體用法視編譯器不同,VC下可以使用 /Fnewsize 編譯選項設置默認棧大小,其中newsize是以位元組為單位,也可以使用/STACK:reserve[,commit]連接選項,使用#pragma指令的樣式如下:
#pragma comment(linker, "/STACK:reserve,commit")
reserve和commit均以位元組為單位,具體查看編譯器幫助文檔。
如果手工模擬函數的遞歸調用,則有範式可供轉換,一般的數據結構書上都有介紹,具體操作難度要視遞歸調用的復雜度而定,一般樣式如下:
//將初始值壓棧
while(棧非空){
//取出棧頂元素
//處理該問題
//依據處理條件將子問題分別壓棧
}
也可以使用一個線程來調用,為線程指定棧大小。
如果是遞歸調用導致棧溢出,建議LZ考慮更好的演算法,增加棧的大小不是根本辦法。

『柒』 c++堆棧的各自大小,堆和棧的各自定義

這里的堆和棧不僅僅是按照數據結構里的堆和棧來理解,更傾向於表示兩種不同作用的內存區域。
棧是有編譯器來管理的,具體的大小可能根據編譯器不同而異,編譯器也可以手動設置棧的大小,通常有1M和2M的,比如在你定義變數時,由編譯器將變數壓棧,作用域結束,編譯器控制變數出棧,程序員不能很直接的操作棧。
堆內存是向系統申請的內存,由程序員管理的,你new或者malloc時系統正常情況下回給你一塊堆內存空間,你愛什麼時候存數據都行,想存什麼就存什麼,想什麼時候釋放(delete,free)都可以。堆的大小沒有什麼具體數值,看機器的運行狀況,配置狀況而定。

『捌』 C++中怎樣手動擴大系統分配的棧空間

如果是系統棧的話
VC++默認的棧空間是1M,有兩個方法更改
a. link時用/STACK指定它的大小,或者在.def中使用STACKSIZE指定它的大小
b. 使用控制台命令「EDITBIN」更改exe的棧空間大小。
例如:打開工程,依次操作菜單如下:Project->Setting->Link,在Category 中選中Output,然後在Reserve中設定堆棧的最大值和commit。
注意:reserve最小值為4Byte;commit是保留在虛擬內存的頁文件%

『玖』 一個函數產生堆棧的大小和什麼有關

和操作系統有關系
不同的操作系統對於棧的默認大小是有規定的。對於Linux系統,默認的棧空間是10M。對於Windows系統,默認的空間是1M。但是棧的空間是可以調整的,在編譯器的編譯屬性更改

『拾』 qtcreator修改編譯堆棧大小

qtcreator修改編譯堆棧大小步驟如下:
1.打開pro文件
2.在最後添加QMAKE_ LFLAGS +=」/STACK:65536, 4096" //設置棧保留大小65536K提交大小4096K。

閱讀全文

與編譯器可以修改棧大小嗎相關的資料

熱點內容
xp自動備份指定文件夾 瀏覽:660
我的世界伺服器如何讓世界平坦 瀏覽:167
伺服器和電腦如何共享 瀏覽:685
程序員早期症狀 瀏覽:568
學小學生編程哪裡學 瀏覽:947
單片機控制與設計論文 瀏覽:775
破解加密視頻違法嘛 瀏覽:242
pythonforandroid下載 瀏覽:235
進光遇顯示伺服器繁忙怎麼辦 瀏覽:643
安卓手機如何改成蘋果xr 瀏覽:519
華為伺服器為什麼在山裡 瀏覽:274
黑馬程序員基礎測試題 瀏覽:265
網易伺服器如何ban物品指令 瀏覽:817
安卓微信不更新了怎麼辦 瀏覽:155
專業程序員什麼水平 瀏覽:879
如何查看伺服器硬碟剩餘空間 瀏覽:574
cdda演算法 瀏覽:412
javawebserver 瀏覽:68
安卓手機怎麼看視頻區域限制 瀏覽:156
php獲取二級域名 瀏覽:471