memalign vs malloc - 使用O_DIRECT参数open一个文件并读写
听说使用odirect参数打开文件时能够以扇区的单位进行读写。
于是open了一个块设备文件/dev/sdo,当然还要带上读写参数O_RDWR
然后进行读写时出错了。
找了一会发现问题根本在于读写的buf未进行align。
这个align并非是长度进行align。因为我用alloc申请了数倍于512或4096的空间均不行。
后来发现是buf的地址需要align,而此操作只能通过memalign系列的函数来完成。
只要buf首地址是512的倍数,至于长度,就无所谓了。但是write/read的时候长度需要是512的整数倍。
更新:
使用memalign分配较大内存如4MB时出现segmentfault错误,转而使用posix_memalign,很好用。
posted on 2016-06-07 21:55 longbigfish 阅读(672) 评论(0) 编辑 收藏 举报