2013年3月31日 星期日

C/C++ : Data structure alignment

在宣告資料結構的時候,ARM 或是 某些編譯器會自動做對齊,但是對齊的方式是每 4 Byte 做一個單位 ( entries )。這樣很多空間都會在對齊的時候浪費掉。對於現在都是以 Giga 等級的記憶體作為應用的美好時代來說當然沒有差。但是如果有一天真的要到對記憶體錙銖必較的時候就要知道這種用法。

在struct的前後加上 ...



#pragma pack(push) /* push current alignment to stack */
#pragma pack(1) /* set alignment to 1 byte boundary */
typedef struct _test
{
    char ch0; //byte 1
    char ch1; //byte 1
    int in; //byte 4
    short sh; //byte 2
}test;
#pragma pack(pop) /* restore original alignment from stack */


參考資料:

1. http://changeway.pixnet.net/blog/post/7669656-data-structure-alignment
2. http://en.wikipedia.org/wiki/Data_structure_alignment

沒有留言: