2016-11-04 8 views
-2

私は何かを理解するためにCPPのSTLコードを読んでいます。この関数はいつ何かを返すでしょう

static size_type __align_it(size_type __new_size) _NOEXCEPT 

    {return __new_size + (__bits_per_word-1) & ~((size_type)__bits_per_word-1);}; 

size_typeはsize_t型で、かつ__bits_per_wordは次のとおりです:

static const unsigned __bits_per_word = static_cast<unsigned>(sizeof(__storage_type) * CHAR_BIT); 

私のコンパイラが打ち鳴らすとバージョンが打ち鳴らす-800.xのようなものであると私は関数である、ベクトルヘッダーファイル内の関数に達します.xx。

私の質問は、__align_itがいつ__new_size以外の何かを返すかということです。

+0

__align_it()にさまざまな値を渡すサンプルコードを書き、戻ってくるものを表示するのはなぜですか。それはかなり明白でなければなりません。 –

+0

ok、私は忘れているように見える+と&演算子の前に行われるので、それは整列です。私の悪い。 –

答えて

1

__new_size__bits_per_wordで除算されない場合は、__new_size以外の何かが返されます。換言すれば、この関数は__new_size__bits_per_wordの最も近い倍数に丸めるために使用されます。

これは、コンパイラによって自動的に決定されない場合、構造体メンバを適切に揃えるために使用される非常に一般的な関数です。たとえば、char配列がある場合でも、アクセスの最適化のために、unsignedフィールドと同じアドレスに整列したいと考えています。

関連する問題