C 記憶體位址分配與劃分

2021-06-19 03:56:32 字數 1943 閱讀 9916

第一部分c++記憶體位址分配簡介

1 記憶體位址是從高位址到低位址進行分配的:

int i=1;

int j=1;

cout<

2函式引數列表的存放方式是,先對最右邊的形參分配位址,後對最左邊的形參分配位址。

3 little-endian模式的cpu對運算元的存放方式是從低位元組到高位元組的

0x1234的存放方式入下:

0x4000 0x34

0x4001 0x12

4 big-endian模式的cpu對運算元的存放方式是從高位元組到低位元組的

0x1234的存放方式入下:

0x4000 0x12

0x4001 0x34

5 聯合體union的存放順序是所有成員都從低位址開始存放。

6乙個變數的位址是由它所佔記憶體空間中的最低位位址表示的。

0x4000 0x34

0x4001 0x12

0x1234的位址位0x4000

7堆疊的分配方式是從高記憶體位址向低記憶體位址分配的。

int ivar=0;

int iarray[2]=;

注意iarray[2]越界使用,比如對其賦值

iarray[2]=0;

那麼則同時對ivar賦值為0,可能產生死迴圈,因為它們的位址相同,即&ivar等於&iarray[2]。

第二部分c/c++記憶體區劃分

一在c中分為這幾個儲存區

1.棧由編譯器自動分配釋放;

2.堆一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os**;

3.全域性區(靜態區),全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態變數在一塊區域,未初始化的全域性變數和未初始化的靜態變數在相鄰的另一塊區域。程式結束釋放;

4.另外還有乙個專門放常量的地方。程式結束釋放。

在函式體中定義的變數通常是在棧上,用malloc, calloc,realloc等分配記憶體的函式分配得到的就是在堆上。在所有函式體外定義的是全域性量,加了static修飾符後不管在**都存放在全域性區(靜態區),在所有函式體外定義的static變數表示在該檔案中有效,不能extern到別的檔案用,在函式體內定義的static表示只在該函式體內有效。另外,函式中的"adgfdf"這樣的字串存放在常量區。比如:

int a = 0; //全域性初始化區

char *p1; //全域性未初始化區

void main()

在常量區,p3在棧上

static int c = 0; //全域性(靜態)初始化區

p1 = (char*)malloc(10); //分配得來得10位元組的區域在堆區

p2 = (char*)malloc(20); //分配得來得20位元組的區域在堆區

strcpy(p1,"123456");

//123456放在常量區,編譯器可能會將它與p3所指向的"123456"優化成一塊

}二.在c++中,記憶體分成5個區,他們分別是堆、棧、自由儲存區、全域性/靜態儲存區和常量儲存區

1.棧,就是那些由編譯器在需要的時候分配,在不需要的時候自動清楚的變數的儲存區。裡面的變數通常是區域性變數、函式引數等。

2.堆,就是那些由new分配的記憶體塊,他們的釋放編譯器不去管,由我們的應用程式去控制,一般乙個new就要對應乙個delete。如果程式設計師沒有釋放掉,那麼在程式結束後,作業系統會自動**。

3.自由儲存區,就是那些由malloc等分配的記憶體塊,他和堆是十分相似的,不過它是用free來結束自己的生命的。

4.全域性/靜態儲存區,全域性變數和靜態變數被分配到同一塊記憶體中,在以前的c語言中,全域性變數又分為初始化的和未初始化的,在c++裡面沒有這個區分了,他們共同占用同一塊記憶體區。

5.常量儲存區,這是一塊比較特殊的儲存區,他們裡面存放的是常量,不允許修改(當然,你要通過非正當手段也可以修改)。

C 記憶體位址分配與劃分

第一部分c 記憶體位址分配簡介 int i 1 int j 1 cout 2函式引數列表的存放方式是,先對最右邊的形參分配位址,後對最左邊的形參分配位址。3 little endian模式的cpu對運算元的存放方式是從低位元組到高位元組的 0x1234的存放方式入下 0x4000 0x34 0x40...

記憶體位址分配

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

記憶體位址空間與分配

在32計算機中,它的最大記憶體容量是2 32次方 4個gb大小 它是由無符號整形從0 4gb順序構成。0位址對應乙個儲存單元 8bit 1位址也對應乙個儲存單元 8bit 以此類推。如果乙個資料對應的位址是0 3位址,那麼它佔3個儲存單元,也就是3個位元組。由於32位微機的位址匯流排寬度為32位,所...