posix_memalign函数详解

简介: 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);

注意

1、第二个参数size必须是alignment的 2 的整数幂次倍

2、对于这个函数,errno不会被设置,只能通过返回值得到,返回值为0表示内存申请成功

使用示例

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

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


推荐一个零声学院免费教程,个人觉得老师讲得不错,分享给大家:[Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,点击立即学习:

相关文章
|
3天前
|
消息中间件 Unix Linux
【探索Linux】P.14(进程间通信 | 匿名管道 | |进程池 | pipe() 函数 | mkfifo() 函数)
【探索Linux】P.14(进程间通信 | 匿名管道 | |进程池 | pipe() 函数 | mkfifo() 函数)
10 0
|
6月前
|
API 开发工具
【Pintos】实现自定义 UserProg 系统调用 | 添加 syscall-nr 系统调用号 | 编写新的参数调用宏
【Pintos】实现自定义 UserProg 系统调用 | 添加 syscall-nr 系统调用号 | 编写新的参数调用宏
74 0
|
5月前
|
存储 Linux
Linux文件编程(lseek函数和stat函数)
Linux文件编程(lseek函数和stat函数)
43 0
Linux文件编程(lseek函数和stat函数)
|
6月前
|
Unix Shell Python
unix高级编程-fork和execve
unix高级编程-fork和execve
27 0
|
8月前
|
存储 安全 Linux
Posix多线程编程
Posix多线程编程
47 0
|
9月前
|
安全 容器
【POSIX信号量】
【POSIX信号量】
42 0
|
10月前
|
Unix Linux 索引
POSIX文件I/O编程
POSIX文件I/O编程
79 0
|
12月前
|
Linux 黑灰产治理
【Linux】POSIX信号量
POSIX和System V都是可移植的操作系统接口标准,它们都定义了操作系统应该为应用程序提供的接口标准。
|
Linux
linux 共享内存 sys-V函数类型
linux 共享内存 sys-V函数类型
53 0
linux 共享内存 sys-V函数类型
|
Linux C++
linux c 之signal 和sigaction区别
http://blog.csdn.net/muge0913/article/details/7331129   要对一个信号进行处理,就需要给出此信号发生时系统所调用的处理函数。可以对一个特定的信号(除去SIGKILL和SIGSTOP信号)注册相应的处理函数。
1427 0