inti=1
;intj=
1;cout
<<&
i<<
endl
<<&
j<<
endl;//
2 函式引數列表的存放方式是,先對最右邊的形參分配位址,後對最左邊的形參分配位址。
3 little-endian模式的cpu對運算元的存放方式是從低位元組到高位元組的
0x1234的存放方式入下:
0x4000 0x34
0x4001 0x12
big-endian模式的cpu對運算元的存放方式是從高位元組到低位元組的
0x1234的存放方式入下:
0x4000 0x12
0x4001 0x34
聯合體union的存放順序是所有成員都從低位址開始存放。
4 乙個變數的位址是由它所佔記憶體空間中的最低位位址表示的。
0x4000 0x34
0x4001 0x12
0x1234 的位址位0x4000
5 堆疊的分配方式是從高記憶體位址向低記憶體位址分配的。
6 char*p
=(char
*)malloc(1);
//為指標p分配一塊記憶體
free(p);
//釋放p所指向的記憶體
free(p);
//error,因為p所指向的記憶體已經釋放掉,再次釋放原來的記憶體區域將會引起錯誤操作p=
0;//將0賦給指標p
free(p);
free(p);
//ok,對乙個空指標,可以多次釋放
char*p
=(char
*)malloc(0);
//p!=null,多次釋放p也會引起錯誤
7 calloc和realloc
void *calloc(size_t num_elements,size_t element_size);
calloc也用於分配記憶體,malloc與calloc的主要區別是
1 後者在返回指向記憶體的指標之前把它初始化為0
2 calloc的引數包括所需元素的數量和每個元素的位元組數,根據這些值,能夠計算出總共需要分配的記憶體
void realloc(void *ptr,size_t new_size);
realloc用於修改乙個原先已經分配記憶體塊的大小,使用這個函式,你可以使一塊記憶體擴大或縮小。如果它用於擴大乙個記憶體塊,那麼這塊記憶體原來的內容依舊保留,新增加的記憶體新增到原來記憶體塊的後面,新記憶體並未以任何方式初始化。如果它用於縮小一塊記憶體,該記憶體塊尾部的部分記憶體被拿掉,剩餘部分記憶體的原先記憶體依舊保留。
如果原先的記憶體塊無法改變大小,realloc將分配另一塊正確大小的記憶體,並把原來記憶體的內容複製到新的塊上,因此,在使用realloc之後,你將不能再使用指向舊記憶體的指標,而是應該改用realloc返回的新指標
如果realloc函式的第乙個引數是null,那麼它的行為和malloc是一樣的。
8 在使用動態記憶體分配的過程中,常常會遇到許多錯誤:
1、對null指標進行解引用
2、對分配的記憶體進行操作時越過邊界
3、釋放並非動態分配皮的記憶體
4、試圖釋放一塊動態分配的記憶體的一部分
5、一塊動態記憶體被釋放後繼續使用
C 記憶體位址分配簡介
1 棧中的變數,其記憶體位址是從高位址到低位址進行分配的 int i 1 int j 1 cout i float pf new float 1.1 cout 2 函式引數列表的存放方式是,先對最右邊的形參分配位址,後對最左邊的形參分配位址。3 little endian模式的cpu對運算元的存放方...
記憶體位址空間與分配
在32計算機中,它的最大記憶體容量是2 32次方 4個gb大小 它是由無符號整形從0 4gb順序構成。0位址對應乙個儲存單元 8bit 1位址也對應乙個儲存單元 8bit 以此類推。如果乙個資料對應的位址是0 3位址,那麼它佔3個儲存單元,也就是3個位元組。由於32位微機的位址匯流排寬度為32位,所...
C 記憶體位址分配與劃分
第一部分c 記憶體位址分配簡介 int i 1 int j 1 cout 2函式引數列表的存放方式是,先對最右邊的形參分配位址,後對最左邊的形參分配位址。3 little endian模式的cpu對運算元的存放方式是從低位元組到高位元組的 0x1234的存放方式入下 0x4000 0x34 0x40...