首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

深度剖析 C/C++ 堆與棧的區別:分配方式、效率、內存佈局

     編輯:關於C語言

核心差異對比表

維度棧堆
分配方式系統自動分配(如局部變量 int b)程序員手動申請(malloc/new),指定大小
釋放方式作用域結束自動釋放手動釋放(free/delete),否則泄漏(程序結束由 OS 回收)
生長方向向低地址擴展,連續內存向高地址擴展,非連續(鏈表式管理)
大小限制較小(通常 1-8MB),棧溢出風險較大(受限於虛擬地址空間),易產生碎片
分配效率極快(指針移動),無碎片較慢(查找合適塊),有碎片
存儲內容函數調用幀:返回地址、參數、局部變量程序員自定義,堆頭通常存塊大小

代碼示例:指針在棧,對象在堆

void f() {
    int* p = new int[5];  // p 在棧,new int[5] 在堆
} // p 自動銷燬,但堆內存未釋放 → 泄漏!需 delete[] p;

總結口訣

  • stack = 棧:自動管理、空間小、速度快、存局部變量/調用幀。
  • heap = 堆:手動管理、空間大、速度慢、存動態對象。
  • C 用 malloc/free,C++ 用 new/delete(會調用構造/析構)。
  • 編譯期確定的變量/參數在棧;運行期動態申請在堆。
本文出自「IT民工一枚」博客,轉載請保留出處:原文鏈接
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved