調大編譯器的棧區
發布時間: 2023-08-28 14:29:44
① 一個程序編譯後,對於棧內存空間的大小,是如何定的呢
棧區內存,由編譯器自動分配釋放 ,存放函數的參數值,局部變數的值等。其操作方式類似於數據結構中的棧。訪問順序遵循先進後出原則。 棧stack:是程序啟動時候由程序留出的工作內存區 比如程序的局部變數,函數調用等都是從棧中獲取,
② 編譯器可以修改棧大小,這個值可以隨意設置嗎
你說的那個默認1M的棧,應該指的是call stack(函數調用使用的棧)。這個棧用來存放函數調用時所傳遞的參數(並非所有參數都通過棧傳遞),棧指針,return address,寄存器的備份,還有每層函數的local variable。
1M大多數情況都是夠用的,如果用完可能會發生非法訪問等錯誤。可能會用完1M的情況:某個被調用的函數申請了一個很大的local variable,比如直接在棧上開個大數組之類的;還有就是遞歸調用,遞歸層數多了後很容易就用完1M。所以遞歸一般不要亂用。
③ 程序設計中,堆和棧比較重要。棧存取速度大於堆,而且編譯器可以修改棧大小,這個值可以隨意設置嗎
學習電腦編程多年了,在程序設計方面也算有一番見解,希望這些經驗能對題主有所幫助。
現在堆棧通常默認為8M,對吧?事實上,如果你不濫用遞歸,或者alloca / vla,大多數時候,就足夠了。即使它不超過內核限制,通常也不適合驅動大型的,或者它會影響並發進程的數量。並且過程啟動時間也應該稍微減少。當然,如果是專用的伺服器系統,問題就不嚴重了。
熱點內容