定义于头文件 <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 );
}
原文链接: https://www.cnblogs.com/Davirain/p/12390411.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;
也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/332842
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!