【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;
}

 

posted @ 2025-07-16 10:20  苏格拉底的落泪  阅读(176)  评论(0)    收藏  举报