規則是以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


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 lver76 的頭像
    lver76

    Iver's Blog

    lver76 發表在 痞客邦 留言(2) 人氣()