memalign vs malloc - 使用O_DIRECT参数open一个文件并读写
2016-06-07 21:55
369 查看
听说使用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,很好用。
于是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,很好用。
相关文章推荐
- Linux系统常用命令
- Git使用总结(包含Git Bash和Git GUI的使用)
- 对oop一些的基本操作
- opencv中drawing line时报错
- Spark学习系列——在虚拟机上搭建 Spark 集群的两种方法
- opencv2实现形态学骨架提取
- oop概念性讲解
- 运维工程师到底在作什么?从何学起,掌握哪些知识?
- Linux软连接和硬链接
- CentOS7+JDK1.7
- nginx提示:500 Internal Server Error错误
- 使用Tomcat搭建服务器并配置项目
- 1572: [Usaco2009 Open]工作安排Job
- centos7 加入自启动服务的方法 以jexus为例
- hjr-Android:下载tomcat服务器文件
- linux(CentOS)基础命令大全
- 开源新闻速递:OpenSUSE 的 OBS 可用于构建大多数发行版的软件包
- Windows7+VS2012下64位OpenCV3.0+CUDA7.5的编译和部署
- 配置Tomcat服务器数据连接池
- Linux时间子系统之六:高精度定时器(HRTIMER)的原理和实现