如何實現128位元組對齊的資料結構

2021-08-25 00:16:34 字數 607 閱讀 9055

在很多機器上,比如cell,要求資料結構必須128位對齊。這就對資料結構的定義提出了額外的要求。

一種較直觀的方法是:在資料結構中新增pad位元組,使得整個資料結構填充為128位,例如:

typedef struct _alf_error_msg error_msg;

其中_pad陣列既是為了使整個資料結構達到128位位元組而額外填充的位元組。

然而,如果資料結構中出現可變化的結構,如使用#ifdef進行條件編譯,那填充位元組又該如何確定?

這裡有乙個trick,可以實現該功能:

typedef union _alf_error_msg

unsigned char _pad[(sizeof(struct error_msg_content) + 127) & 0xff80];

} error_msg;

在這裡由於extra_error_code不能保證始終存在,因此我們不能確定_pad的位元組數。在這裡我們使用聯合資料型別,將_pad的位元組數確定為保證容納struct _error_msg_content的最小位元組數。

根據演算法(sizeof(struct) + 127) & 0xff80,可以確保這點。 注意0x80=128,這點可以確保128位對齊。

結構體4位元組對齊規則的詳解

一 四位元組對齊的規則 c 中結構體變數的儲存為什麼有個4位元組對齊的規則,這裡是假設32位機器上,cpu在讀取記憶體資料的時候4位元組對齊會取得更快的速度 這是因為 1位元組8位,4位元組正好32位,而32位機器的暫存器,位址什麼的都是32位的,正好一次處理就完成。例如,下面的結構各成員空間分配情...

Mat和IplImage的4位元組對齊問題

首先說一下我發現這個神奇的問題的過程 我是在做產品的有效區域查詢時發現,好好的演算法有時候可以準確的提取產品有效區域,有時候會出問題,後來就將二值化影象畫素值列印出來,最後發現有時候其中會出現乙個 兩個或者三個205,開始一直以為是我在某個地方對影象資料進行了操作,後來將所有操作都給取消,還是經常 ...

如何尋回可用空間0位元組硬碟的資料

磁碟打不開可用空間0位元組,是因為這個i盤的檔案系統內部結構損壞導致的。要恢復裡面的資料就必須要注意,這個盤不能格式化,否則資料會進一步損壞。具體的恢復方法看正文 工具 軟體 星空資料恢復軟體 步驟2 軟體執行後,直接雙擊需要恢復資料的盤 步驟3 程式會很快將找到的檔案,放到與要恢復盤同名的目錄中 ...