單位,補碼之類的能夠看這個:http://www.cnblogs.com/dotnetcrazy/p/8178175.htmlhtml
先說說大小端對齊的事情,而後再看:服務器
內存最小單位==》Byte,int 佔 4Byte架構
重點來了,大於Byte的數據類型在內存中存放須要有前後順序(一個裏面放不下,那麼在內存中就要有前後順序了)spa
小端對齊:高內存地址放整數高位,低內存地址放整數低位(高高低低)簡稱:倒着放(表明:X86,ARM)3d
大端對齊:高內存地址放整數低位,低內存地址放整數高位(高低低高)簡稱:正着放(不少unix服務器都這樣)unix
舉個栗子:int i=0x12345678;調試
以前也有想了解這些,第一個不是學底層的不知道從何理解,第二個上網搜概念,大牛們三言兩語就結束了,舉得例子也比較複雜,對於非C方向的可能有點吃力,因此一直沒理解。還有些網上的根本是胡說,妄以揣測,不能力排衆議htm
今天偶然發現原來還要內存窗口之說,就慢慢的打開了思路,造成了本身的理解,有不當之處歡迎指出,小子感激涕零blog
進入正文:內存
調試的時候先打開內存窗口:
監視一下i的地址,在內存窗口裏面找到這個值,發現裏面有個32(50轉換成16進制就是32)
驗證一下下面的確是16進制
個人理解是:
此次把int改爲16進制再看看調試結果:CPU是x8六、ARM架構基本上都遵循 小端對齊(高地址放高位,低地址放低位)
圖中很明顯,內存地址越下面的越大(0x0018FBF4 > 0x0018FBB8),咱們監控的地址明顯是低地址
0x12345678,高位是1,低位是8。我畫張轉換圖
而後解釋下,爲何佔了4個
int,佔4個字節(byte),而1byte=8個bit
因此看圖:
再根據低低高高的原則,就是這樣放了
驗證一下個人想法:(1不夠了,因此用0補)
內存中存的是2進制的數,如今咱們進行逆推,天然就有了這幅圖:(內存最小單位byte)
吐槽一下,尼瑪,上學一直不太明瞭的東西,在VS這個神器下居然解決了!!
擴展:(X86,ARM通常都是小端對齊,不少Unix服務器用大端對齊)
內存地址位數其實也有講究,把VS切換到X64下,發現內存地址也長了許多
X86的是8位,也就是1byte,同理可推X64的是2byte(各個環境不一樣這個值可能不太同樣)