C語言中的記憶體位址分配模型

2021-08-31 05:58:03 字數 1032 閱讀 4719

[img]

說明:1、程式**區:存放函式體的二進位制**。

2、全域性區資料區:全域性資料區劃分為三個區域。全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態變數在一塊區域, 未初始化的全域性變數和未初始化的靜態變數在相鄰的另一塊區域。常量資料存放在另乙個區域裡。這些資料在程式結束後由系統釋放。我們所說的bss段(bss segment)通常是指用來存放程式中未初始化的全域性變數的一塊記憶體區域。bss是英文block started by symbol的簡稱。這些記憶體的分配位址由低到高,與區域性變數在棧中分配位址的方向不同,棧中位址的分配有高到低。

3、棧區:由編譯器自動分配釋放,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。區域性變數在棧中位址的分配有高到低。

4、堆區:一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os**。注意它與資料結構中的堆是兩回事,分配方式倒是類似於鍊錶,呵呵。

5、命令列引數區:存放命令列引數和環境變數的值。

例項:

#include

using namespace std;

int p = 1;

int p1 = 2;

int main()

輸出:[color=red]&p 010d9030

&p1 010d9034[/color]

[color=blue]&iv 0023faec

&iv2 0023fae0

&iv3 0023fad4

iv2 3

&reiv 0023fae0

&reiv2 0023faec

&reiv3 0023faec

&pi 0023faa4

&a 0023fa98

pi 0023fa98

*pi=5

&di 0023fa88

pc 0023fa78

*pc= 10

[/color][color=red]&s1 010d9038

&s2 010d903c[/color]

記憶體位址分配

inti 1 intj 1 cout i endl j endl 2 函式引數列表的存放方式是,先對最右邊的形參分配位址,後對最左邊的形參分配位址。3 little endian模式的cpu對運算元的存放方式是從低位元組到高位元組的 0x1234的存放方式入下 0x4000 0x34 0x4001 ...

C語言基礎之 記憶體位址分配

一.記憶體劃分 位址由高到低 1.棧區 棧區的資料以棧的形式進行儲存,特點 先進後出 函式體內存放的區域性變數存放在棧區,由系統分配空間和系統釋放.開發人員不需要關心如何為區域性變數分配空間.int a 10 printf p n a 2.堆區由開發人員手動申請,手動釋放,唯一一塊由開發人員操作的區...

C 記憶體位址分配簡介

1 棧中的變數,其記憶體位址是從高位址到低位址進行分配的 int i 1 int j 1 cout i float pf new float 1.1 cout 2 函式引數列表的存放方式是,先對最右邊的形參分配位址,後對最左邊的形參分配位址。3 little endian模式的cpu對運算元的存放方...