導航:首頁 > 源碼編譯 > 編譯器設置棧的大小

編譯器設置棧的大小

發布時間:2024-06-26 00:20:30

java 每個函數的棧空間大小是

在Java程序運行時,各個棧空間大小如下:
(1) 寄存器。最快的保存區域,位於處理器內部,數量十分有限,它是根據需要由編譯器分配。我們對此沒有直接的控制權.
(2) 棧(stack)。駐留於常規RAM(隨機訪問存儲器)區域,這是一種特別快、特別有效的數據保存方式,僅次於寄存器。創建程序時,Java編譯器必須准確地知道堆棧內保存的所有數據的「長度」以及「存在時間」。這失去了一定的靈活性,因此對象句柄是存放在棧中,但Java對象並不放到其中。
(3) 堆(heap)。保存了Java對象。和棧不同,它最吸引人的地方在於編譯器不必知道要從堆里分配多少存儲空間,也不必知道存儲的數據要在堆里停留多長的時間。因此,用堆保存數據時會得到更大的靈活性。要求創建一個對象時,只需用new命令編制相關的代碼即可。執行這些代碼時,會在堆里自動進行數據的保存。當然,為達到這種靈活性,必然會付出一定的代價:在堆里分配存儲空間時會花掉更長的時間!
(4) 靜態存儲。這兒的「靜態」(Static)是指「位於固定位置」(盡管也在RAM里)。程序運行期間,靜態存儲的數據將隨時等候調用。可用static關鍵字指出一個對象的特定元素是靜態的。但Java對象本身永遠都不會置入靜態存儲空間。
(5) 常數存儲。常數值通常直接置於程序代碼內部。這樣做是安全的,因為它們永遠都不會改變。有的常數需要嚴格地保護,所以可考慮將它們置入只讀存儲器(ROM)。
(6) 非RAM存儲。數據完全獨立於一個程序之外,則程序不運行時仍可存在,並在程序的控制范圍之外。

❷ 函數調用棧不夠應該怎麼辦

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

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

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

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

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

❺ msp430編譯器的堆棧在哪裡設置

我用的是IAR 4.11b for MSP430,4.11裡面改堆棧是在你工程的Options裡面。首先在Workspace窗口右鍵單擊你的工程,然後選擇第一項"Options",或者選在上面菜單中選擇Project->Options也可以進入這個選項。在Options裡面第一個General Options中,有一堆選項卡,第五個選項卡(就是Library Options再向右一個)就是Stack/Heap,用來調整堆和棧的大小的。調的時候先在Override Default前面打鉤。如果你用的是地址線沒有擴展的MCU版本,則只有Stack Size 和Heap Size 兩個選項可以選擇。如果你是用的是較新的F5系列擴展地址線版本MCU,則還可以設置Data20 Heap Size.具體怎麼設要根據你的應用需求。如果你需要自己申請用來存放Data20類型的數據,就需要把Data20 Heap Size設大一點。如果存放普通的數據那麼只需要更改Stack Size和Heap Size。

Stack和Heap的區別有問題嗎?如果不清楚的話上網路輸入「堆和棧的區別」自己看吧。根據你的應用到底是堆空間要求多一些,還是棧空間要求多一些,給Stack Size和Heap Size分配不同大小的Size。

別的版本的IAR我也沒用過,有什麼問題在線交流吧。希望對你有幫助!

閱讀全文

與編譯器設置棧的大小相關的資料

熱點內容
插入單片機檢測不到埠 瀏覽:467
svn文件夾如何刪除 瀏覽:621
編譯過程和解析過程 瀏覽:819
德雲天團app如何參與活動 瀏覽:740
編譯系統的硬體原理 瀏覽:330
黑色玫瑰什麼時候出的伺服器 瀏覽:636
如何打開列印共享伺服器 瀏覽:866
手機熱點密碼的加密方式 瀏覽:328
貴州大數據伺服器閑置雲伺服器 瀏覽:527
文件夾加密微軟 瀏覽:383
蘋果突然提示無法驗證伺服器身份怎麼解決 瀏覽:988
調度命令發布的原則 瀏覽:679
dos提示不是內部或外部命令 瀏覽:683
騰訊100g編程源碼 瀏覽:209
機械設計和編程 瀏覽:830
八角單片機紅外遙控led 瀏覽:94
血液凈化pdf 瀏覽:383
烏市停車APP哪裡下載 瀏覽:904
單片機中fg是什麼意思 瀏覽:883
程序員網線 瀏覽:279