規則是以structure裡最佔記憶体空間的資料型態為單位,比如int佔 4 bytes,當不滿 4 bytes 時,遇到另一種型態就把記憶体填滿至 4 bytes,從下一個 4 bytes 開始放下一個變數。
#include <iostream>
using namespace std;
typedef struct //structure中最佔記憶体空間的是unsigned int 佔4 bytes。
{
unsigned aaa:2;
unsigned rewe:1;
unsigned rewse:1;
unsigned resswe:28;//滿 32 bits
unsigned char es;//遇到另一種型態,接下來又遇到另一種型態int,所以在這裡又填滿成 32 bites。
unsigned int e;//32 bits
}stobj_typ;
typedef struct //structure中最佔記憶体空間的是unsigned har 或 char 佔1 bytes。
{
unsigned char aaa:4;
unsigned char qws:5;
unsigned char es:3;//到這裡總共 12 bits,佔了1 byte + 4bits,下面遇到另一種型態 char, 把4 bits填滿至8 bits, 所以共用了 2 bytes。
char e;// 1 byte
}kk_typ;
struct on_off {//IBM的網站上看來的例子~就懶得寫了。
unsigned light : 1;
unsigned toaster : 1;
unsigned toasjter : 1;
int count; /* 4 bytes */
unsigned ac : 4;
unsigned : 4;
unsigned clock : 1;
unsigned : 0;
unsigned flag : 1;
} kitchen ;
int main(void)
{
cout << "stobj_typ size is "<< sizeof(stobj_typ) << endl;
cout << "kk_typ size is "<<sizeof(kk_typ) << endl;
cout << "kitchen size is "<<sizeof(kitchen) << endl;
return 0;
}
output:
stobj_typ size is 12
kk_typ size is 3
kitchen size is 16
Reference : Help - IBM