程式宣告變數時會佔用記憶體,而記憶體分為三個部份來存放這些變數,分別是global、stack與heap。一一分別說明如下:
1. global:
用來放全域變數、靜態變數(static)等等。 ex: static NSString *URL = @"xxxxxxx"
2. stack:
台灣稱為堆疊,大陸叫做棧,具有LIFO(後進先出)的特性,記憶體配置方式是由高到低。
存放區域變數、函式的參數與函式的位址等等,由系統管理,必須在編譯時期為已知。這些變數的回收會發生在它從堆疊pop出去的時候,因為個數、大小什麼的都是已知,所以系統知道怎麼進行配置與回收。 ex: int age = 41
3. heap:
台灣正體中文稱為堆積,大陸叫做堆,記憶體配置方式是由低到高。
這裡的記憶體由使用者負責進行回收,配置則是由malloc或是new來負責。使用這裡的記憶體主要是用在編譯時期還不知道大小或個數的變數。例如說,你需要用一個陣列,這個陣列的大小要在執行的時候由使用者的輸入來決定,那你就只能使用動態配置,也就是把這個陣列配置在heap中。ex: NSArray *array = [NSArray array];
參考連結:
1. http://tung168.pixnet.net/blog/post/284837600-global%2Cheap%2Cstack
2. http://wp.mlab.tw/?p=312