首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 物件記憶體配置判斷:堆疊 vs 堆積完整指南

     編輯:程式設計綜合問答

判斷規則

建立方式物件位置成員位置
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 物件在堆積,內部陣列在堆積
}

堆疊空間真的很小嗎?

  • Windows 預設 1 MB,Linux 預設 8 MB(可 ulimit -s 調整)。
  • 一般區域物件(含 vector、string 等容器)物件本身極小(幾十 bytes),元素在堆積,不佔堆疊。
  • 僅當大型陣列(如 int buf[1000000])或深度遞迴 才會堆疊溢位。

設計建議

  1. 預設用區域變數(RAII),簡潔安全。
  2. 需要動態生命週期(跨函數、條件建立、多型)用智慧指標管理堆積物件。
  3. 類別成員非必要勿用指標,直接嵌入物件減少間接層與配置開銷。
  4. 大型暫存緩衝區用 std::vector / std::unique_ptr<T[]> 置於堆積。

總結

「非 new 在堆疊,new 在堆積」對物件本身成立;成員跟隨宿主;容器元素永遠在堆積。理解所有權與生命週期,比死記位置更重要。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved