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;
}
}
xxxxxxxxxx
#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;
}
}
出力例
0x7fffd930ca40 255
バージョン
言語
- C++11
処理系
- Clang: 3.0 ✅
- GCC: 5.0 ✅
- ICC: ??
- Visual C++: 2012 ✅, 2013 ✅
- 2012はマニュアル(MSDNライブラリ)に記載がないものの、実装されている。