次の方法で共有


align

特定のサイズの記憶域 (特定のアラインメント指定でアラインされた) を、特定の記憶域の最初に使用可能なアドレスに合わせてアラインします。

void* align(
    size_t Alignment, // input
    size_t Size,      // input
    void*& Ptr        // input/output
    size_t& Space     // input/output
);

パラメーター

  • Alignment
    試行するアラインメントの境界。

  • Size
    アラインされたストレージのサイズ (バイト単位)。

  • Ptr
    使用する利用可能な一連の記憶域プールの開始アドレス。 このパラメーターは出力パラメーターでもあり、アラインメントが成功した場合は新しい開始アドレスを格納します。

    align() が失敗した場合、このパラメーターは変更されません。

  • Space
    アラインされた記憶域の作成に使用する align() で利用可能な合計領域。 このパラメーターは出力パラメーターでもあり、アラインされたストレージと関連するオーバーヘッドが差し引かれた後の記憶域バッファーに残されている調整された領域を格納します。

    align() が失敗した場合、このパラメーターは変更されません。

戻り値

要求されたアライン バッファーが利用可能な領域に収まらない場合は null ポインター。それ以外の場合は Ptr の新しい値。

解説

変更された Ptr および Space パラメーターによって、Alignment と Size に異なる値を指定して、同じバッファーについて繰り返し align() を呼び出すことができます。 align() の使用方法の 1 つを次のコード スニペットに示します。

#include <type_traits> // std::alignment_of()
#include <memory>
//...
char buffer[256]; // for simplicity
size_t alignment = std::alignment_of<int>::value;
void * ptr = buffer;
std::size_t space = sizeof(buffer); // Be sure this results in the true size of your buffer

while (alignment, sizeof(MyObj), ptr, space)) {
    // You now have storage the size of MyObj, starting at ptr, aligned on 
    // int boundary. Use it here if you like, or save off the starting address
    // contained in ptr for later use.
    // ...
    // Last, move starting pointer and decrease available space before
    // the while loop restarts.
    ptr = reinterpret_cast<char*>(ptr) + sizeof(MyObj);
    space -= sizeof(MyObj);
}
// At this point, align() has returned a null pointer, signaling it is not
// possible to allow more aligned storage in this buffer.

必要条件

ヘッダー: <memory>

名前空間: std

参照

関連項目

<memory>