C C 中避免系統的位元組對齊

2021-06-22 13:26:28 字數 452 閱讀 4306

在定義了乙個新的struct後。

系統會按照一定的規則將新生命的型別變數進行位元組對齊,如下結構體:

typedef struct testtest;

該結構體型別可能會被對齊為12個位元組。

那麼,在記憶體流和檔案流操作中可能會出現這樣的用法:

fwrite(strptr,1,sizeof(test)*len,fp);

事實上,被寫入了len*12個位元組,因為sizeof(test)實際上不等於10,而是12。

那麼,如下簡單地操作可以避免在流操作中出現的一些問題:

char * cptr=(char *)malloc(size)

((test *)cptr).a=0;

((test *)cptr).b=str1;

cptr+=10;

剩下的各位自行發揮吧,只是稍微拋磚引玉了一下,純現碼的字,有什麼不足一定要提出~。

C C 位元組對齊

什麼是對齊,以及為什麼要對齊 現代計算機中記憶體空間都是按照byte劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何位址開始,但實際情況是在訪問特定變數的時候經常在特定的記憶體位址訪問,這就需要各型別資料按照一定的規則在空間上排列,而不是順序的乙個接乙個的排放,這就是對齊。對齊的作用和原因 各...

c c 位元組對齊

什麼是對齊,以及為什麼要對齊 現代計算機中記憶體空間都是按照byte劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何位址開始,但實際情況是在訪問特定變數的時候經常在特定的記憶體位址訪問,這就需要各型別資料按照一定的規則在空間上排列,而不是順序的乙個接乙個的排放,這就是對齊。對齊的作用和原因 各...

C C 位元組對齊

概念 對齊跟資料在記憶體中的位置有關。如果乙個變數的記憶體位址正好位於它長度的整數倍,他就被稱做自然對齊。比如在32位cpu下,假設乙個整型變數的位址為0x00000004,那它就是自然對齊的。為什麼位元組需要對齊 根本原因在於cpu訪問資料的效率問題。假設上面整型變數的位址不是自然對齊,比如為0x...