共用方式為


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 參數可讓您在相同緩衝區上重複呼叫 align(),可能使用 Alignment 和 Size 的不同值。 下列程式碼片段示範align() 的一個用法。

#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>