C/C++メモ

OS自作過程でのメモ。適宜追記する。

文字列

C++リテラルの前の接頭語で文字列の種類が変わる。

ワイド文字列(16 ビット文字コード) unsigned short int

L"Hello, World"

utf8文字列

u"Hello, World"

参照型

参照型が関数の引数の場合、呼び出し元はポインタを渡せばよい。

構造体宣言

以下のように構造体を宣言すると、詰め物なしでメモリが確保される。

struct {
  ...
} __attribute__((__packed__));

配置new

クラスのコンストラクタはnew演算子からしか呼べないので、 メモリの確保をせずに、クラスを生成したい場合には配置newが利用できる。 配置newを使うには、new演算子を定義するか、<new>をインストールすればよい。

OSのメモリ割り当て機能が使えない場合は新しいメモリを確保するnewはできないので。

メモリのアラインメント

配列でメモリ確保したあとに、その領域を任意の構造体にキャストして使うことがよくある。 その際、配列のアライメントと構造体のアライメントが異なることがあるため、宣言時にアライメントを指定する必要がある。

alignas(サイズ)

型のアライメントを取得する。

alignof(型)

ポインタ

ポインタの値にアドレスが使われているのは、C++の規格で規定されているわけではなく実装依存