| 建立方式 | 物件位置 | 成員位置 |
|---|---|---|
Type obj;(區域) | 堆疊 | 堆疊 |
Type* p = new Type(); | 堆積 | 堆積 |
static Type obj; / 全域 | 資料段 (.bss/.data) | 資料段 |
| 類別成員(非靜態) | 跟隨宿主物件 | 跟隨宿主物件 |
class A { vector<int> v; };
void foo() {
A a; // a 在堆疊,a.v 物件在堆疊,a.v 內部陣列在堆積
A* p = new A; // p 在堆疊,*p 在堆積,(*p).v 物件在堆積,內部陣列在堆積
}
ulimit -s 調整)。vector、string 等容器)物件本身極小(幾十 bytes),元素在堆積,不佔堆疊。int buf[1000000])或深度遞迴 才會堆疊溢位。std::vector / std::unique_ptr<T[]> 置於堆積。「非 new 在堆疊,new 在堆積」對物件本身成立;成員跟隨宿主;容器元素永遠在堆積。理解所有權與生命週期,比死記位置更重要。