資料在記憶體中的存放

來源:互聯網
上載者:User

標籤:os   使用   io   資料   代碼   工作   管理   c   應用   

在電腦系統中,啟動並執行應用程式的資料都是儲存在記憶體之中

不同類型的資料,儲存的記憶體地區不同,其中包括:

1->棧區(stack) 由編譯器自動分配並釋放,一般存放函數的參數值,局部變數等

2->堆區(heap) 由程式員分配和釋放,如果程式員不釋放,程式結束時,可能會由作業系統回收

3->寄存器區 用來儲存棧頂指標和指令指標

4->全域區(靜態區) 全域變數和靜態變數的儲存是放在一起的,初始化的全域變數和靜態變數存放在一塊地區,未初始化的全域變數和靜態變數在相鄰的另一塊地區,程式結束後由系統釋放

5->文字常量區 存放常量字串,程式結束後由系統釋放

6->程式碼區 存放函數的二進位代碼

棧區中的資料

應用程式啟動後,作業系統會為應用程式在棧區中開闢記憶體空間,用於存放局部變數,以及函數的參數等

iOS主線程棧區大小為1M,MAC主線程棧區大小為8M

棧區中的變數由編譯器負責分配和釋放

棧區中的資料是以“棧”的形式管理的,先進後出(FIBO)

訪問棧區中變數的效率高,不會出現記憶體片段

棧區中的變數名(不帶*)相當於是指向棧區資料的指標別名,變數名可以簡化程式員的工作

堆區中的資料

1->由於棧區中的空間有限,iOS的應用程式中,對象都是建立在堆中的

2->堆區包括系統記憶體和虛擬記憶體(硬碟緩衝),由所有正在啟動並執行應用程式共用使用

3->堆區中的記憶體配置由作業系統負責,作業系統使用一個鏈表統一維護所有已經分配的記憶體記錄

4->由於堆區是由所有應用程式共用的,作業系統以匿名(只記錄記憶體位址和大小,不記錄具體類型)的方式記錄已經分配的記憶體地區

5->要訪問堆區中的資料,必須通過指標的方式才可以進行,指標的類型決定了訪問堆中資料的方式

6->當某一記憶體地區不再使用時,程式需要通知作業系統回收該記憶體地區,從而可以保證該記憶體地區被其他程式再次使用,否則,該地區將永遠無法被再次分配,這就是傳說中的“記憶體泄露”

7->如果某一地區已經被釋放,仍然視圖訪問該地區,會提示“壞記憶體訪問”,這就是傳說中的“野指標訪問”

8->相比較棧區,堆區中的效率要低很多,同時容易出現記憶體片段

9->相比較棧區,堆區中的訪問方式更加靈活,對象佔用的記憶體也可以更大

資料在記憶體中的存放

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.