アライメントを考慮したサイズの取得

category: C++ | 2017-09-17

メモリの確保などでアライメントを考慮したサイズを取得したい場合などに使用します。

ビット演算による求め方

アライメントの値が2の累乗であれば、ビット演算による高速な方法があります。
アルゴリズムとしては四捨五入と同じような感じです(ギリギリまで上げて落とす)

std::align(C++11)

C++11からはアライメント調整のためにstd::align関数が追加されました。
ただこちらはアロケータ等のメモリ操作を目的に作られた関数でAPIも少し分かりにくいです。

アライメントサイズと要求サイズ、それにポインタとバッファサイズを渡すと アライメント調整されたポインタを返してくれます。
要求サイズを渡しているのは、バッファサイズからあふれるならnullptrを返すようにしているためです。
詳しくはリファレンスを参考にしてください。

使い方は以下のようになります。