- cstdlib[meta header]
- std[meta namespace]
- function[meta id-type]
- cpp17[meta cpp]
namespace std {
void* aligned_alloc(size_t alignment, size_t size);
}
- size_t[link /reference/cstddef/size_t.md]
指定したアライメントでメモリを確保する。
- 指定するアライメント値
alignment
は、実装がサポートしている有効なアライメント値であること- POSIXの実装では、2の累乗、および
sizeof(void*)
の倍数であること
- POSIXの実装では、2の累乗、および
- サイズ値
size
は、alignment
の整数倍であること
指定されたアライメントで、size
分の不定値領域を確保する。
確保した領域へのポインタを返す。
確保できなかった場合、ヌルポインタを返す。
#include <cstdlib>
int main()
{
// 8バイトアライメントで、16バイトの領域を確保する
void* p = std::aligned_alloc(8, 16);
std::free(p);
}
- std::aligned_alloc[color ff0000]
- C++17
- Clang: 3.4
- GCC: 8.3
- Visual C++: (2019 Update 3の時点では未実装)
- Clangは、グローバル名前空間 (POSIXの実装) では、3.1で動作確認できた
- GCCは、グローバル名前空間 (POSIXの実装) では、4.4で動作確認できた
- Visual Studio 2019 Update 3の時点では存在が確認できない。
_aligned_malloc
という同等のWindows用機能が提供されているため、そちらを使う必要がある