posix_memalign函数详解以及使用时的注意事项

前言

在编写可移植的代码的时候,所有的类型都该自然对齐,因为不对齐会导致性能下降,在大多数情况下,编译器和C库透明地帮你处理对齐问题。POSIX 标明了通过malloc( ), calloc( ), 和 realloc( ) 返回的地址对于任何的C类型来说都是对齐的。在Linux中,这些函数返回的地址在32位系统是以8字节为边界对齐,在64位系统是以16字节为边界对齐的。但是对于更大的边界,例如页面,程序员需要动态的对齐。因此,POSIX 1003.1d提供一个叫做posix_memalign( )的函数:

函数原型

int posix_memalign (void   **memptr,
                    size_t   alignment,
                    size_t   size);

使用例子

posix_memalign成功时会返回10240(size)字节的动态内存,即memptr所指向的内存的地址,并且这块内存的地址是256(alignment)的倍数

char *memptr;
int ret;
ret = posix_memalign (&memptr, 256, 10240);
if (ret) {
    fprintf (stderr, "posix_memalign: %s\n",
             strerror (ret));
    return -1;
}
//释放所申请内存
free (buf);

使用时的注意事项

1、size必须是alignment的2的整数幂次倍
2、对于这个函数,errno不会被设置,只能通过返回值得到,返回值为0表示内存申请成功

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值