7: 2012-02-18 (土) 21:30:04 s10037 | 8: 2012-02-19 (日) 02:50:09 s10037 | ||
---|---|---|---|
Line 80: | Line 80: | ||
**アラインメント [#nc3a80e9] | **アラインメント [#nc3a80e9] | ||
***構造体に関して [#pfeed50a] | ***構造体に関して [#pfeed50a] | ||
- | たとえば | + | たとえば~ |
- | typedef struct Hoge | + | typedef struct Hoge~ |
{ | { | ||
int int1; | int int1; | ||
Line 89: | Line 89: | ||
}Hoge; | }Hoge; | ||
- | があったとして | + | があったとして~ |
- | サイズがいくつになるか | + | サイズがいくつになるか~ |
- | [obara@TandemMirror arainmento]$ ./a.out | + | [obara@TandemMirror arainmento]$ ./a.out ~ |
- | 24 | + | 24~ |
- | stHoge 0xbfde0e2c | + | stHoge 0xbfde0e2c ~ |
- | int1 0xbfde0e2c | + | int1 0xbfde0e2c ~ |
- | double1 0xbfde0e30 | + | double1 0xbfde0e30 ~ |
- | char1 0xbfde0e38 | + | char1 0xbfde0e38 ~ |
- | double2 0xbfde0e3c | + | double2 0xbfde0e3c ~ |
- | + | ~ | |
- | ってな感じになりchar1とdouble2の間に隙間が出来た | + | ってな感じになりchar1とdouble2の間に隙間が出来た~ |
- | これはコンパイラが勝手に境界調整(アラインメント)して適当に詰め物(パディングというらしい)を入れた | + | これはコンパイラが勝手に境界調整(アラインメント)して適当に詰め物(パディングというらしい)を入れた~ |
- | CPUによってパディングのやり方が違うらしい | + | CPUによってパディングのやり方が違うらしい~ |
- | + | ~ | |
- | パディングには下手に触ってはいけないらしい | + | パディングには下手に触ってはいけないらしい~ |
**malloc calloc realloc [#mae99393] | **malloc calloc realloc [#mae99393] | ||
Line 138: | Line 138: | ||
ifndef とは逆にifdefというのももある | ifndef とは逆にifdefというのももある | ||
ifndefとは逆で、ifdefは定義されていればendifまでを実行するらしい | ifndefとは逆で、ifdefは定義されていればendifまでを実行するらしい | ||
+ | |||
+ | |||
+ | **bitを利用したフラグ管理 [#t8bfadcf] | ||
+ | ***unsignedを使う [#n460c455] | ||
+ | |||
+ | まず | ||
+ | #define aFlag (1)~ | ||
+ | #define bFlag (1 << 2)~ | ||
+ | #define cFlag (1 << 3)~ | ||
+ | とフラグをどのように使うかマクロ定義や定数で定義しておくとよい~ | ||
+ | unsigned Flag = 0;//フラグを記録させる変数~ | ||
+ | 必要な関数は3つ~ | ||
+ | セット、リセット、チェック~ | ||
+ | void set(unsigned f)~ | ||
+ | {~ | ||
+ | Flag |= f; | ||
+ | }~ | ||
+ | void reset(unsigned f)~ | ||
+ | {~ | ||
+ | Flag &= ~f; | ||
+ | }~ | ||
+ | //~はビット反転~ | ||
+ | int check(unsigned f)~ | ||
+ | {~ | ||
+ | return ((Flag & f) == f)? 1 : 0; | ||
+ | }~ | ||
+ | メモリの節約、可読性の向上~ | ||
+ | たとえば~ | ||
+ | if(check(aFlag|bFlag|cFlag))~ | ||
+ | {~ | ||
+ | }else~ | ||
+ | {~ | ||
+ | }~ |
- ObaraC のバックアップ一覧
- ObaraC のバックアップ差分(No. All)
- 1: 2010-09-30 (木) 11:30:25 s10037
- 2: 2010-09-30 (木) 11:30:31 s10037
- 3: 2010-10-23 (土) 01:08:14 s10037
- 4: 2010-11-01 (月) 21:16:43 s10037
- 5: 2010-11-14 (日) 13:04:42 s10037
- 6: 2011-05-07 (土) 20:15:27 s10037
- 7: 2012-02-18 (土) 21:30:04 s10037
- 8: 2012-02-19 (日) 02:50:09 s10037
- 9: 2012-02-19 (日) 06:41:41 s10037
- 10: 2012-02-22 (水) 19:19:25 s10037
- 11: 2012-02-22 (水) 23:05:29 s10037
- 12: 2012-02-23 (木) 15:59:11 s10037
- 13: 2012-02-24 (金) 16:11:25 s10037
- 14: 2012-02-25 (土) 07:00:27 s10037
- 15: 2012-03-02 (金) 17:19:52 s10037
- 16: 2012-06-08 (金) 14:16:45 s10037
- 現: 2012-09-16 (日) 16:12:45 s10037