2021 iThome 鐵人賽
自我挑戰組
DAY 20

Day20

少年DevOps的C++奇怪漂流 系列 第 20 篇
r76021061
3 年前 ‧ 1165 瀏覽

今天來記錄一個簡單的概念sizeof,sizeof可以幫助計算型態, 結構體, 與陣列, 與指標的大小,例如
short: 2bytes
long: 4 bytes
double: 8 bytes
double arrary[20]: 160 bytes
值得注意的是指標在32位元作業系統是4 bytes (32/8=4)到了64位元作業系統是8 bytes,由此可知若在64位元作業系統底下,指標拿來指向short反而會浪費記憶體。
雖然在C++中陣列本身就是指標,可以直接將陣列丟給指標變數不會報錯*ptr = arrary,但將陣列丟給sizeof時會自動轉換成計算整個陣列大小。如

int arrary[20];
int *ptr = arrary;
count << sizeof arrary <<endl;  //get 80 bytes
count << sizeof *ptr <<endl;  //get 4 bytes in 32-bits os, 32/8=4

昨天我們輸出結果可以看出來p的記憶體位置與*ptr1的記憶體位置差4bytes(因為int型態佔4bytes),而*ptr1與**ptr2與***ptr3各差了8bytes(在64位元系統中64bits=8bytes)

**ptr3指向p記憶體位置:0x7fffffffdb0c
*ptr3指向ptr1的記憶體位置:0x7fffffffdb10
ptr3指向ptr2的記憶體位置:0x7fffffffdb18
取得ptr3記憶體位址:0x7fffffffdb20
此系列
上一篇
此系列
下一篇

0 則留言