优化内存空间,提升读写速度

大耗子 2020年03月28日 176次浏览

文章链接:https://codemouse.online/archives/2020-03-28201251

posix_fadvise与fallocate

#include <fcntl.h> 
int posix_fadvise(int fd, off_t offset, off_t len, int advice);

int fallocate(int fd, int mode, off_t offset, off_t len);

advice的参数:

标签描述
POSIX_FADV_NORMAL表示该应用程序没有建议提供有关其指定的数据访问模式。如果没有意见,给出了一个打开的文件,这是默认的假设。
POSIX_FADV_SEQUENTIAL该应用程序需要访问指定的数据顺序(与以前高的人读低偏移)。
POSIX_FADV_RANDOM将指定的数据将会以随机顺序进行访问。
POSIX_FADV_NOREUSE将指定的数据将只访问一次。
POSIX_FADV_WILLNEED将指定的数据将在不久的将来访问。
POSIX_FADV_DONTNEED指定的数据不会在短期内被访问。

优化内存空间,提升读写速度

提前告知内核需要这么大的空间,提前准备一下。

因为是一个全新的区块,要写的数据一定是连续的,而之前的区块有各种各样的数据,数据存放就不连续,速度自然会有所降低。

// TODO tell the kernel that we will need the input file
posix_fadvise(src_fd, 0, stat_buf.st_size, POSIX_FADV_WILLNEED);

// more efficient space allocation via fallocate for dst file
if (fallocate(dst_fd, 0, 0, stat_buf.st_size) == -1) 
    perror("destination file fallocate");