linux memalign()

来源:互联网 发布:濒海战斗舰 知乎 编辑:程序博客网 时间:2024/06/06 09:49

转载于:http://blog.csdn.net/syc0616/article/details/3734941

cell 上的DMA bus error 多半是由于传输内存开始地址不是16位对齐的。使用memalign, valloc,(见下转贴), malloc_aligned, 该函数是cell专有,包含在libmisc.h中。

以下转自http://ms.mblogger.cn/lymons/posts/9902.aspx。

    在GNU系统中,malloc或realloc返回的内存块地址都是8的倍数(如果是64位系统,则为16的倍数)。如果你需要更大的粒度,请使用memalign或valloc。这些函数在头文件“stdlib.h”中声明。

    在GNU库中,可以使用函数free释放memalign和valloc返回的内存块。但无法在BSD系统中使用,而且BSD系统中并未提供释放这样的内存块的途径。

    函数:void * memalign (size_t boundary, size_t size) 
    函数memalign将分配一个由size指定大小,地址是boundary的倍数的内存块。参数boundary必须是2的幂!函数memalign可以分配较大的内存块,并且可以为返回的地址指定粒度。

    函数:void * valloc (size_t size) 
    使用函数valloc与使用函数memalign类似,函数valloc的内部实现里,使用页的大小作为对齐长度,使用memalign来分配内存。它的实现如下所示: 
    void *
    valloc (size_t size)
    {
      return memalign (getpagesize (), size);
    }

-------------------------------
在记录两个好的cell专题页:
1.mit cell专题页:http://cag.csail.mit.edu/ps3/cellminiref.shtml
2.ibm 专题:http://www.ibm.com/developerworks/cn/linux/pa-linuxps3-3/index.html
0 0
原创粉丝点击