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