1. 程式人生 > >內存段是如何劃分的

內存段是如何劃分的

初始化 部分 sym log 靜態 可能 數據 執行 src

BSS段:BSS段(bss segment)通常是指用來存放程序中未初始化的全局變量的一塊內存區域。BSS是英文Block Started by Symbol的簡稱。BSS段屬於靜態內存分配。

數據段:數據段(data segment)通常是指用來存放程序中已初始化的全局變量的一塊內存區域。數據段屬於靜態內存分配。

代碼段:代碼段(code segment/text segment)通常是指用來存放程序執行代碼的一塊內存區域。這部分區域的大小在程序運行前就已經確定,並且內存區域通常屬於只讀, 某些架構也允許代碼段為可寫,即允許修改程序。在代碼段中,也有可能包含一些只讀的常數變量,例如字符串常量等。代碼段是存放了程序代碼的數據,假如機器中有數個進程運行相同的一個程序,那麽它們就可以使用同一個代碼段。

堆(heap):堆是用於存放進程運行中被動態分配的內存段,它的大小並不固定,可動態擴張或縮減。當進程調用malloc等函數分配內存時,新分配的內存就被動態添加到堆上(堆被擴張);當利用free等函數釋放內存時,被釋放的內存從堆中被剔除(堆被縮減)

棧(stack):棧在進程運行時產生,一個進程有一個進程棧。棧用來存儲程序臨時存放的局部變量,即函數{}內定義的變量 不包括static 類型的。函數被調用時,他的形參也會被壓棧。------------將棧看作一個寄存器交換臨時數據的內存區

技術分享

PS

隊列是先進先出:就像一條路,有一個入口和一個出口,先進去的就可以先出去。

而棧就像一個箱子,後放的在上邊,所以後進先出。

內存段是如何劃分的