ぼく用あれこれまとめ

メモリアラインメント

最終更新:

bokuyo

- view
管理者のみ編集可

メモリアラインメント

  • アラインメントとは「整列」のこと.
    • 英書見るとだいたい「align」って書かれてる.
  • メモリ空間を効率よく使うための考え方


ビットフィールド

  • オブジェクト指向プログラミングでは、クラス内のデータ(メンバ変数)のことをフィールドと呼ぶ.
  • ビット単位でフィールドをいちゃいちゃしたいときに登場するフィールドがビットフィールド.
    • 一番小さなchar型でさえ1Byte(= 8bit)の大きさを持ってる.
  • メンバ名のあとにコロンを付けて、型の範囲でビット数を宣言する.
  • 組み込みプログラミングのような限られたメモリ空間を有効に使いたい場合は使うかもしれない.
    • でも、最近の計算機だと使う必要なし.
    • それと処理系依存.
    • 下手に使うと、処理が遅くなるからやめとけ><

C++でビットフィールドを宣言する.

class Eureka
{
public:
	char a : 1;
	char b : 2;
	char c : 3;
	char d : 4;
	char e : 5;
	char f : 6;
	char g : 7;
	char h : 8;
};

見るからにエラー

class EurekaForError
{
public:
	char x : 9;	//error C2034: 'Eureka::x' : ビット フィールドの宣言で指定されたビット数が、基本型のビット数を超えています。
	char y : 0;	//error C2149: 'Eureka::y' : 名前付きビットフィールドの幅が 0 です。
	char z : 1.5f;	//error C2058: 定数式が整数ではありません。
			//error C2149: 'Eureka::z' : 名前付きビットフィールドの幅が 0 です。
};
  • ビットフィールドは1Byte(= 8bit)のchar型だったら、1~8bit内でしか定義できない. もちろん整数で。

コンパイラ エラー C2034




参考文献

記事メニュー
ウィキ募集バナー