- memory[meta header]
- std[meta namespace]
- function[meta id-type]
- cpp11[meta cpp]
namespace std {
void* align(std::size_t alignment, std::size_t size,
void*& ptr, std::size_t& space);
}
アライメント調整された領域を得る。
範囲[ptr, ptr + space)
の中にalignment
バイトでアライメント調整された領域のsize
バイトに一致するバッファがあるなら、
ptr
を一致する領域の先頭アドレスへと更新し、space
から使用したバイト数を減算する。
そのようなバッファがなければ、この関数は何もしない。
更新されたptr
を返す。一致する領域がなければ、ヌルポインタを返す。
#include <iostream>
#include <memory>
int main()
{
char buffer[256];
void* ptr = buffer;
std::size_t space = sizeof(buffer) - 1;
// intアライメントで、intをN個確保。
std::size_t N = 3;
if (std::align(alignof(int), sizeof(int) * N, ptr, space)) {
std::cout << ptr << " " << space << std::endl;
}
}
- std::align[color ff0000]
0x7fffd930ca40 255
- C++11
- Clang: 3.0
- GCC: 5.0
- ICC: ??
- Visual C++: 2012, 2013
- 2012はマニュアル(MSDNライブラリ)に記載がないものの、実装されている。