你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> Objective-C程序內存分布

Objective-C程序內存分布

編輯:IOS開發綜合

Objective-C程序內存分布:程序在運行中會占用內存,一般內存中分為堆區,棧區,代碼區等那麼Objective-C的內存分布又是什麼樣的呢?

內存分布

我們查看內存分布是我們可以通過打印內存地址比如說堆和棧,他們的內存地址相距就非常非常遠,我們通過下面的圖片來了解內存程序運行時內存的分布情況。

全局區:存放全局變量和常量

非初始化(bss):存放沒有被初始化或初始化為0的全局變量;

初始化(data): 初始化過的全局變量數據,用來保存初始化了的非0的全局變量 ;

文字常量區(rodata):存放常量數據;

程序代碼區(text):用來存放程序的代碼(如函數)和部分整數常量是可以執行的不被共享;

棧區(stack):由系統自動分配,一般存放函數參數值、局部變量的值等。由編譯器自動創建與釋放;

堆區(heap):由程序創建和釋放,相對自由一片區域,沒有大小限制,采用鏈表形式管理;

查看下方代碼查看分布情況

//代碼為前輩所有
//main.cpp
int a = 0; // 全局初始化區
char *p1; // 全局未初始化區
main {
    int b; // 棧
    char s[] = "abc"; // 棧
    char *p2; // 棧
    char *p3 = "123456"; // 123456\0在常量區,p3在棧上
    static int c =0; // 全局靜態初始化區
    p1 = (char *)malloc(10);
    p2 = (char *)malloc(20); // 分配得來的10和20字節的區域就在堆區
    strcpy(p1, "123456"); // 123456\0在常量區,這個函數的作用是將"123456" 這串字符串復制一份放在p1申請的10個字節的堆區域中。
    // p3指向的"123456"與這裡的"123456"可能會被編譯器優化成一個地址。
}

上一篇中提到Block對應不同類型的Block,當然也存儲在不同區域。堆中的內存需要我們手打創建和釋放,相比較其他都是系統創建很釋放。

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved