linux memalign()

    xiaoxiao2021-04-11  33

    转载于: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
    转载请注明原文地址: https://ju.6miu.com/read-666994.html

    最新回复(0)