linux通过posix_memalign函数可以分配按2的幂对齐的内存,从而给分配大块内存带来了便利性。
int posix_memalign (void **memptr, size_t alignment, size_t size);
参数说明:
memptr,用于保存返回的内存地址
alignment,内存对齐的标准,即2的幂,并且必须是void*的整数倍
size,所需内存的大小,可以不是2的幂
返回值:
成功时返回0
失败时,返回EINVAL代表alignment不是2的幂, ENOMEM代表没有足够的内存
注:分配的内存可以通过free进行释放
#include <stdio.h>
#include <stdlib.h>
void allocateMemory(int align)
{
char* buf = 0;
int ret = 0;
int alc_size = 10;
ret = posix_memalign((void**)&buf, align, alc_size);
if(ret)
{
printf("posix_memalign failed, ret=%d\n", ret);
}
else
{
printf("buf addr:%p\n", buf);
free(buf);
}
}
int main()
{
allocateMemory(1024);
allocateMemory(4096);
allocateMemory(1000);
return 0;
}
运行程序输出:
buf addr:0x55f61af23400
buf addr:0x55f61af24000
posix_memalign failed, ret=22