大小端:
對於像c++中的char這樣的資料型別,它本身就是占用乙個位元組的大小,不會產生什麼問題。但是當數制型別為int,在32bit的系統中,它需要占用4個位元組(32bit),這個時候就會產生這4個位元組在暫存器中的存放順序的問題。比如int maxheight = 0x12345678,&maxheight = 0x0042ffc4。
具體的該怎麼存放呢?這個時候就需要理解計算機的大小端的原理了。
大端:(big-endian)就是把數值的高位位元組放在記憶體的低位位址上,把數值的地位位元組放在記憶體的高位位址上。
小端:(little-endian)就是把數字的高位位元組放在高位的位址上,低位位元組放在低位位址上。
我們常用的x86結構都是小端模式,而大部分dsp,arm也是小端模式,不過有些arm是可以選擇大小端模式。所以對於上面的maxheight是應該以小端模式來存放,具體情況請看下面兩表。
位址0x0042ffc4
0x0042ffc5
0x0042ffc6
0x0042ffc7數值
0x78
0x56
0x34
0x12
圖(1)為小端模式位址
0x0042ffc4
0x0042ffc5
0x0042ffc6
0x0042ffc7
數值0x12
0x34
0x56
0x78
圖(2)為大端模式
通過上面的**,可以看出來大小端的不同,在這裡無法討論那種方式更好,個人覺得似乎大端模式更符合我的習慣。(
注:在這裡我還要說一句,其實在計算機記憶體中並不存在所謂的資料型別,比如char,int等的。這個型別在**中的作用就是讓編譯器知道每次應該從那個位址起始讀取多少位的資料,賦值給相應的變數。)
位域:
在計算機中是採用二進位制0和1來表示資料的,每乙個0或者1占用1位(bit)儲存空間,8位組成乙個位元組(byte),為計算機中資料型別的最小單位,如char在32bit系統中占用乙個位元組。但是正如我們知道的,有時候程式中的資料可能並不需要這麼的位元組,比如乙個開關的狀態,只有開和關,用1和0分別替代就可以表示。此時開關的狀態只需要一位儲存空間就可以滿足要求。如果用乙個位元組來儲存,顯然浪費了另外的7位儲存空間。所以在c語言中就有了位段(有的也叫位域,其實是乙個東西)這個概念。具體的語法就是在變數名字後面,加上冒號(:)和指定的儲存空間的位數。具體的定義語法如下:
struct 位段名稱//例項
struct node
node;
關於大小端 位域的一些概念詳解
大小端 對於像c 中的char這樣的資料型別,它本身就是占用乙個位元組的大小,不會產生什麼問題。但是當數制型別為int,在32bit的系統中,它需要占用4個位元組 32bit 這個時候就會產生這4個位元組在暫存器中的存放順序的問題。比如int maxheight 0x12345678,maxheig...
關於KVM一些概念
kvm kernel virtual machine核心虛擬機器 是乙個linux核心模組,可以用modprobe去載入kvm模組。載入模組後,才能進一步通過其他工具建立虛擬機器。但僅有kvm模組是不行的,因為使用者無法直接控制核心模組去作事情,所以還要有乙個使用者空間的工具才行。這個使用者空間的工...
關於uboot一些概念
u boot的環境變數值得注意的有兩個 bootcmd和bootargs。bootcm bootargs bootargs是環境變數中的重中之重,甚至可以說整個環境變數都是圍繞著bootargs來設定的。bootargs的種類非常非常的多,我們平常只是使用了幾種而已.bootargs非常的靈活,核心...