memalign vs malloc - 使用O_DIRECT参数open一个文件并读写

Posted longbigfish

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 vs malloc - 使用O_DIRECT参数open一个文件并读写的主要内容,如果未能解决你的问题,请参考以下文章

我们啥时候需要使用 posix_memalign 而不是 malloc?

posix_memalign、malloc 和 calloc 与 lli 解释器有问题

C函数memalign

glibc的malloc钩子

Windows 中 posix_memalign 的正确替代品是啥?

4096个字节是4K对齐了吗?