轉 靜態區的大小:
一般的c語言書上都是這麼講的:
乙個程式的全域性變數,static變數等從靜態儲存區分配;
區域性變數,函式形參從堆疊分配;
動態申請的空間從堆上分配。
那麼加入在win32環境中,這裡的堆,堆疊,靜態儲存區是否就對應著使用者的2g位址空間的某一部分?
它們究竟各在哪個位置並且各佔多大空間呢?
堆;你自己分配多大就多大,但系統有上限,你可以測試一下你能malloc多少
棧:程式執行所佔空間,可以完全占用完吧,windows然後啟用虛擬記憶體.
靜態區:你的常量有多大就多大,
棧,在windows下,棧的大小是2m(也有的說是1m,總之是乙個編譯時就確定的常數),
如果申請的空間超過棧的剩餘空間時,將提示overflow。因此,能從棧獲得的空間較小。
堆呢?堆就不是。
堆是不連續的記憶體區域。這是由於系統是用鍊錶來儲存的空閒記憶體位址的,自然是不連續的,
而鍊錶的遍歷方向是由低位址向高位址。堆的大小受限於計算機系統中有效的 虛擬記憶體 。由此可見,堆獲得的空間比較靈活,也比較大。
字面值常量儲存在常量區,和靜態變數儲存在靜態區不一樣
另外還有**區,存放函式二進位制**。
靜態區存放全域性變數 ::
堆區 棧區 靜態區 常量區還有???
常見的儲存區域可分為 由編譯器在需要的時候分配,在不需要的時候自動清楚的變數的儲存區。裡面的變數通常是區域性變數 函式引數等。由new分配的記憶體塊,他們的釋放編譯器不去管,由我們的應用程式去控制,一般乙個new就要對應乙個delete。如果程式設計師沒有釋放掉,程式會一直占用記憶體,導致記憶體洩漏...
靜態儲存區 堆區和棧區
記憶體分配有三種 靜態儲存區 堆區和棧區。他們的功能不同,對他們使用方式也就不同。靜態儲存區 內存在程式編譯的時候就已經分配好,這塊內存在程式的整個執行期間都存在。它主要存放靜態資料 全域性資料和常量。棧區 在執行函式時,函式 包括main函式 內區域性變數的儲存單元都可以在棧上建立,函式執行結束時...
靜態區 非靜態區 構造方法的執行順序
package demo class c class a extends c static public a system.out.println 方法 public class b extends a public b system.out.print b public static void m...