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

C++ 中「棧」的雙重含義:數據結構棧(鏈/順序)與程序運行時棧的區別

     編輯:程式設計疑難解答

概念劃分

維度數據結構「棧」程序內存「棧」
定義後進先出 (LIFO) 的邏輯結構操作系統為線程分配的連續內存區域
實現形式順序棧(數組)、鏈棧(鏈表)僅有一種:連續地址空間,向下/向上增長
操作push/pop/peek函數調用入棧/出棧(保存返回地址、局部變量、寄存器)
管理者程序員編寫代碼管理編譯器/運行時自動管理
溢出表現邏輯錯誤(數組越界/內存耗盡)StackOverflowError(棧幀過深/大數組)

針對提問點澄清

  1. 剩余空間 3 byte,申請 3 byte 數組:內存棧分配以字節為單位,只要總大小不超過棧限制(通常 1-8MB),不會提示溢出。內存棧是連續的,無碎片問題。
  2. 鏈棧 vs 順序棧:屬於數據結構實現選擇,與程序內存棧無關。內存棧本質是順序結構,不存在「鏈棧」分區。
  3. 數組存儲位置:
    • 局部數組 int a[100] → 棧上(函數幀內)。
    • new int[100] / malloc → 堆上。
    • 靜態/全局數組 → 數據段。

總結

嚴格區分邏輯結構(數據結構棧/隊列/樹/圖)與物理存儲區(棧/堆/數據段/代碼段),兩者不同維度概念,切勿混淆。

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