記憶體對齊 位元組序試題小練

2021-09-29 17:44:38 字數 580 閱讀 1508

在乙個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.小端順序 低位元組資料存放在記憶體低位址處,高位元組資料存放在記憶體高位址...