【linux编程】内存分配函数posix_memalign
函数posix_memalign
函数posix_memalign原型:
#include <stdlib.h>
int posix_memalign(void **memptr, size_t alignment, size_t size);
参数说明
- memptr: 双重指针,用于存储分配的内存地址
- alignment: 对齐要求(字节数),必须是 2 的幂次方且是 sizeof(void*) 的倍数
- size: 要分配的内存大小(字节数)
返回值
- 成功:返回 0,分配的内存地址存储在 *memptr 中
- 失败:返回错误码(如 EINVAL 或 ENOMEM),*memptr 的值未定义
注意事项
- 对齐要求限制:alignment 必须是 2 的幂次方(1, 2, 4, 8, 16, 32...)且至少是 sizeof(void*) 的倍数
- 内存释放:使用 free() 函数释放由 posix_memalign 分配的内存
- 错误处理:函数不设置 errno,而是直接返回错误码
- 可移植性:需要定义 _POSIX_C_SOURCE >= 200112L 或 _GNU_SOURCE 宏
示例:
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
int main() {
void *ptr;
size_t alignment = 16; // 16字节对齐
size_t size = 1024; // 分配1KB内存
int result = posix_memalign(&ptr, alignment, size);
if (result != 0) {
printf("分配失败,错误码: %d\n", result);
return 1;
}
printf("成功分配 %zu 字节内存,地址: %p\n", size, ptr);
printf("地址是否按 %zu 字节对齐: %s\n",
alignment,
((uintptr_t)ptr % alignment == 0) ? "是" : "否");
// 使用内存...
// 释放内存
free(ptr);
return 0;
}

浙公网安备 33010602011771号