C語言之變量內存體現(VS編譯器)

計算機中所有的數據都是以二進制形式表示的,一個字節(byte)=8位(bit)。

爲了便於書寫與理解,內存地址空間是用16進制的數據表示, 如0x8049324,因爲十六進制更簡短,換算的時候一位16進制數可以頂4位2進制數。(所以說內存地址與內存地址對應的值在計算機內部都是用二進制表示的,只不過人們把她抽象出來的時候用了簡便的寫法)
例如int類型佔四個字節,他在計算機中的表示爲00000000 00000000 00000000 00000000,
2^4=16,16進制是即逢16進1,所以滿四位進1,一個十六進制數=0.5字節=4位。

有的用4位16進制數表示內存地址,另一種用8位16進製表示內存地址,這是因爲有些cpu只能尋址16位(只有16根地址線),而有些cpu能尋址32位(有32位地址線)。地址線越多,能存儲的存儲單元的個數也就越多。但是無論內存裏存儲單元的個數有多大(即是4位16進制還是8位16進製表示內存地址),每一個存儲單元的容量都是1字節。

C語言是最接近硬件底層的語言,下面通過C語言來體現變量在內存中的存儲情況。
在這裏插入圖片描述
C語言中0x代表十六進制數,定義一個int類型的變量num,它在內存中的體現如下圖。
在這裏插入圖片描述
關於如何存放的問題,這跟cpu的大小端模式有關。一般cpu採用都是小端模式,即高字節存放高地址,低字節存放在低地址,讀地址時從高地址開始讀。所以編譯器顯示的時候還是從小到大顯示。

當num爲五個字節時,很明顯,此時int類型(四個字節),已經存不下五個字節了。
按照大端模式的存放,低字節(10)存放在高地址的一個單元格中,但此時這個單元格不屬於num這個變量佔有的四個單元格內,
所以,0x10就並不顯示了。

在這裏插入圖片描述

在VS中查看變量的存放

設置斷點,打開調試模式,在代碼空白處右擊選擇快速監視
輸入 &變量 ,點擊重新計算,獲得a的地址
在這裏插入圖片描述
在這裏插入圖片描述
輸入a的地址,可以看到從低地址到高地址,高地址(如00)存放高位,低地址存放在低位(04),帶點的就是變量a的存放地址,一個四個字節。

一個變量的地址值,是它所有字節地址中的最小值

在這裏插入圖片描述
所以int類型能存儲的最大數值是2^32

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章