定義於頭文件 <cstdlib> (c++)
void * aligned_alloc ( std::size_t alignment, std::size_t size); (c++17)
分配 size 字節的未初始化存儲, 由alignment指定其對齊。 size 參數必須是alignment 的整數倍。
參數:
alignment - 指定對, 必須是實現支持的合法對齊。
size - 分配的字節數, alignment的整數倍。
返回值:
成功時,返回指向新分配內存起始的指針。為了避免內存泄露,返回的指針必須由std::free或std::realloc 解分配。
失敗時,返回空指針。
注意:
傳遞不是alignment 的整數倍的size 或不受實現支持或非法alignment 導致函數失敗並返回空指針。
作為實現支持 要求的例子,POSIX函數posix_memalign 接受任何是2的冪且為sizeof(void*) 倍數的alignment, 而基於POSIX的alignmed_alloc 實現繼承此要求。
常規的std::malloc 分配適用於任何對象的大小的內存,此函數適用於對齊分配,例如對SSE, 緩存線或VM頁邊界。
#include <cstdio>
#include <cstdlib>
int main() {
int * p1 = static_cast < int* > ( std::malloc ( 10 * sizeof *p1 ) );
std::printf ( "default-aligned address: %p \n", static_cast < void* > ( p1) );
std::free ( p1 );
int * p2 = static_cast < int* > ( std::aligned_alloc ( 1024, 10 * sizeof *p2 ) );
std::prinf ( "1024-byte aligned address : %p \n", static_cast <void*> ( p2 ) );
std::free( p2 );
}