程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 內存分段 && 緩沖區,匯編語言

內存分段 && 緩沖區,匯編語言

編輯:C++入門知識

內存分段 && 緩沖區,匯編語言


一、內存中的程序:

 在進程被載入內存中時,基本上被分成許多小的節,以下是6個主要的節。

  低地址                                                   高地址

.text 節

  .text節基本上相當於二進制可執行文件的.text部分,它包含了完成程序任務的機器指令。

  該節標記為只讀,如果發生寫操作,會造成 segmentation fault。

  在進程最初被加載到內存中開始,該節的大小就被固定。

.data  節

  .data節用來存儲初始化過的變量

   如: int  a = 0;

  該節的大小在運行時是固定的。

.bss  節

  棧下節 (below stack section)用來存儲未初始化的變量

  如: int  a;

  該節的大小在運行時是固定的。

節(空閒存儲器)

  堆節(heap section)用來存儲動態分配的變量,位置從低地址向高地址增長。

  內存的分配和釋放通過malloc()和free()函數控制。

  棧節(stack section)用來跟蹤函數調用(可能是遞歸),在大多數系統上從內存的高地址向低地址增長。

環境/參數

  環境/參數節(environment/ arguments section)用來存儲系統環境變量的一份復制文件,進程在運行時可能需要。

  例如,運行中的進程可以通過環境變量來訪問路徑、shell名稱、主機名等信息。該節是可寫的。

  命令行參數也保存在該區域中。

二、緩沖區

  緩沖區(buffer)是指這樣一個存儲區域:該區域用來接收和保存數據,直至進程對數據進行處理。由於各進程都有緩沖區,

所以保持各進程緩沖區彼此無關是很重要的。通過在進程內存的 .data 和 .bss 節分配內存,可以做到這一點。

三、析構函數

  如果類沒有定義自己的析構函數,編譯器會生成默認的析構函數。

默認的析構函數不能刪除在 堆(空閒存儲器)上分配的對象和對象成員。

因此,如果成員占用的空間是在構造函數中動態分配的,就必須自定義析構函數,然後釋放以前分配的內存。

使用C++智能指針,將自動刪除空閒存儲器中不再需要的內存。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved