在程式語言中,記憶體就相當與一張白紙,這張白紙是一個有限的空間,而這些空間會用來記憶資料,就像是大腦一樣。現今的電腦普遍是使用 范紐曼型架構[註 1],而這樣的架構下有所謂的記憶體管理問題。
在程式設計中,有所謂的記憶體管理,最常見到的記憶體架構是使用 Heap 與 Stack。關於這個主題並不會講解,詳閱 Stack based memory allocation - wiki 與 Memory management: Heap - wiki。
值得注意的是,Stack 與 Heap 的記憶體管理有相對的差異,下面翻譯來自 GeeksforGeeks - stack vs heap memory allocation
PARAMETER | STACK | HEAP |
---|---|---|
概述 | 記憶體取用區段是連續的 | 記憶體取用區段是不連續連續的(隨機) |
創建與回收 | 由編譯器自動操作 | 由編撰者手動操作 |
資源消耗 | 少 | 多 |
實作的難度 | 較難 | 較易 |
資料取用速度 | 較快 | 較慢 |
已知問題 | 記憶體容易不足 | 記憶體使用方式零散 |
參考區域性 [註 2] | 優化 | 尚可 |
記憶體彈性 | 固定 | 必要時可重整 |
資料的分佈架構 | 線型 | 階層型 |
在 C 語言中我們可以使用 malloc
向系統要求記憶體空間。
// C
#include <stdlib.h>
typedef struct Person {
int age;
char gender;
} Person;
Person* PersonMake(int age, char gender) {
Person* person = malloc(sizeof(Person));
if (!person) return NULL;
person->age = age;
person->gender = gender;
return person;
}
malloc
參數使用 sizeof
的語法,建立一個記憶體區塊,要注意的是,這個操作有可能失敗,細節請參考 Should I check if malloc() was successful?
Objective 在 NSObject 的封裝後,使用 [ObjectClass alloc]
來使用,這部分會在後續的 Objective-C 物件編寫討論。
malloc
需要引入那個 headerstruct
的 value type,所以 Objective-C 有 Value type 嗎?