在 C 中读取大缓冲区 - 高效技术

Posted

技术标签:

【中文标题】在 C 中读取大缓冲区 - 高效技术【英文标题】:Reading large buffers in C - Efficient techniques 【发布时间】:2012-05-10 07:19:28 【问题描述】:

我正在用 C 语言编程。有时我们必须从通常使用 fread 或 read 系统调用的文件中读取大数据,这意味着流 I/O 或系统调用 I/O。

我想问,如果我们正在读取这么大的数据,然后计算块大小并据此读取,它是否有助于我们有效地读取它?

我知道通过系统调用读取可能会使其变慢,并且还有其他条件,例如如果我们必须处理网络套接字,那么我们应该使用这些,而不是使用基于流的 I/O 会给我们带来优化的结果。同样,我需要一些技巧和窍门来从文件中读取大数据以及需要注意的事项。

另外,如果 mmap 可以比这些传统的 I/O 更有利,请详细说明什么情况?

平台:Linux,gcc编译器

【问题讨论】:

您咨询过this question、this question和this question吗? 【参考方案1】:

你考虑过memory-mapping使用mmap的文件吗?

【讨论】:

【参考方案2】:

我认为分块阅读总是一个好主意。对于大文件,我们显然不想在堆中分配大量内存。 如果文件大约为几 MB,那么我认为我们可以在 char 缓冲区中一次读取整个文件并使用该缓冲区来处理您的数据。这比一次又一次地从文件中读取要快。

【讨论】:

以上是关于在 C 中读取大缓冲区 - 高效技术的主要内容,如果未能解决你的问题,请参考以下文章

如何提高java读取大文本文件的效率

Java中的缓冲流

缓冲流

windows下C语言非阻塞方式读取键盘缓冲区

字符流

如何在 Perl 中读取和写入大缓冲区到进程 stdin/stdout/stderr?