次のbit field
サンプルコードはhereです。より良いストレージ効率を要求します。しかし、私はどのようにコンパイラがビットフィールドを処理するのだろうか?Cコンパイラはどのようにビットフィールドを扱うのですか?
私はCコンパイラHASからビット単位の操作のための追加の命令を生成すると思います。したがって、データサイズは小さくなりますが、コードサイズが大きくなります。
Cコンパイラをよく知っている人は、何か光を当てることができますか?
#include <stdio.h>
// A space optimized representation of date
struct date
{
// d has value between 1 and 31, so 5 bits
// are sufficient
unsigned int d: 5;
// m has value between 1 and 12, so 4 bits
// are sufficient
unsigned int m: 4;
unsigned int y;
};
int main()
{
printf("Size of date is %d bytes\n", sizeof(struct date));
struct date dt = {31, 12, 2014};
printf("Date is %d/%d/%d", dt.d, dt.m, dt.y);
return 0;
}
生成されたアセンブラを見て調べることができます。 –
@OliverCharlesworth思い出してくれてありがとう。どのように私はそれを忘れることができます... – smwikipedia
それはあなたのプラットフォーム(基本的なHWアーキテクチャ+指定コンパイラ)によって異なりますが、一般的に - はい、コンパイラは、ビット単位の操作を追加する必要があります(通常、またはより遅いランタイム実行)。 –