2011年6月21日 星期二

struct成員的記憶體位址alignmentt



一般來說, compiler編譯c程式時, 遇到struct時會對成員資料的位址進行alignment的動作, 以增加記憶體讀取的效率. 所以struct往往會佔有比所有資料成員大小和還要多的記憶體空間. 例如下列的struct data的記憶體大小為12.


struct data {
     char num;
     int size;
     void *ptr;
};


如果因為特殊需要, 需要節省記憶體, 則可以在程式碼中需要進行pack memory的struct前後, 採用#pragma pack來告訴compiler是否要進行pack memory的動作, 例如下列的struct packed_data的記憶體大小則為9, 不是12.


#pragma pack(1)
struct packed_data {
     char num;
     int size;
     void *ptr;
};
#pragma pack()

沒有留言:

張貼留言