在乙個64位的作業系統中定義如下的結構體:
struct st_task
;
同時定義fool函式如下:
void fool()
; uint64_t a = 0x00010001;
memcpy(&task, &a, sizeof(uint64_t));
printf("%11u,%11u,%11u", task.id, task.value, task.timestamp);
}
上述fool()程式的執行結果為?
我們從上面的結構體看到st_task這個結構體共16個位元組(id:4個位元組(其中後兩個位元組是為了記憶體對齊,裡面是空的),value:4個位元組,timestamp:8個位元組)。
然後fool函式中,a是8個位元組。接下來memcpy函式將a這8位元組拷貝給task這個結構體
由於id是兩個位元組(後兩個位元組是為了記憶體對齊用的),所以最後結果是1,0,0
記憶體對齊 大端位元組,序小端位元組序驗證
空結構體 對於空結構體,就是只有結構體這個模子,但裡面卻沒有元素的結構體。例 typedef struct student std 這種空結構體的模子佔乙個位元組,sizeof std 1。柔性陣列 結構體中最後乙個元素可以是乙個大小未知的陣列,稱作柔性陣列成員,規定柔性陣列前面至少有乙個元素.ty...
位元組序與位元組對齊
一.網路位元組序與主機位元組序 1.大端和小端儲存 大端 big endian 高位存低位址。符合人類的正常思維。網路位元組序採用大端 網路傳輸的是位元組流 小端 littile endian 低位存低位址。如果將乙個32位的整數0x12345678存放到乙個整型變數 int 中,這個整型變數採用大...
記憶體位元組序
記憶體位元組序 一 位元組順序 資料在記憶體中的存放順序。分為小端 little endian 和大端位元組順序 big endian 資料在記憶體中是乙個位元組乙個位元組來儲存的,因為乙個記憶體單元的大小就為乙個位元組。1.小端順序 低位元組資料存放在記憶體低位址處,高位元組資料存放在記憶體高位址...