【stm32f103學(xué)習(xí)筆記】字、半字、字節(jié)和sizeof()
CPU按照其處理信息的字長可以分為:八位微處理器、十六位微處理器、三十二位微處理器以及六十四位微處理器等。
CPU最大能查找多大范圍的地址叫做尋址能力 ,CPU的尋址能力以字節(jié)為單位 ,如32位尋址的CPU可以尋址2的32次方大小的地址也就是4G,這也是為什么32位的CPU最大能搭配4G內(nèi)存的原因 ,再多的話CPU就找不到了。
1)stm32是32bit處理器,所以它的字是32bit的(一次處理4字節(jié)長度的數(shù)據(jù))。半字自然就是16bit(2字節(jié));字節(jié)是8bit
stm32和傳統(tǒng)的arm相比最大的好處就是不需要對齊,三種類型的數(shù)據(jù)可以在內(nèi)存中無縫的存放。而傳統(tǒng)的arm7或arm9等是照著地址對齊的,就是說不管8bit或者16bit的數(shù)據(jù)都要占用4個字節(jié)的空間,這樣的結(jié)果就是造成內(nèi)存的浪費。
寄存器的訪問
半字型的寄存器用u16類型的變量訪問,u8只能訪問低8位,u32讀的時候沒問題,寫的時候會因編譯器的不同而出現(xiàn)偏差。12
2)在MSP430上,由于它是16bit處理器,所以它的字是16bit的。半字=字節(jié)=8bit。
…….
sizeof()看兩個例子:
(1) int應(yīng)該是2還是4?
VC++默認int是longint,長度是4 TC默認int是shortint,長度是2123
int類型所占的字節(jié)數(shù)依賴于機器的字長, 有16位, 32位, 64位.我們現(xiàn)在買電腦時所說的32位機, 64位機就是指這個, 在16位機上int長度是2, 在32位機上長度是4, 所以在編碼的時候需要寫int長度時, 我們不能想當(dāng)然的寫2或4, 而應(yīng)使用sizeof來計算, sizeof(int)這樣就不會錯了, 而且提高了程序的兼容性。
(2) A機器int占用2個字節(jié),B機器占用4字節(jié),申請內(nèi)存存放一個int數(shù)據(jù)。
如寫入:
int*i=(int*)malloc(2);12
那么在A機器中能正常運行,在B上則會報錯
應(yīng)寫成:
int*i=(int*)malloc(sizeof());12
這樣A、B機器中都能兼容。