2013-08-05 53 views
1

是否可以停止在C/C++中刷新自己的io缓冲区?停止从C中刷新的io缓冲区

为了获得最佳性能,我试图保存数据,然后在操作完成后刷新。

我可以写入一个数组,然后打印出来,我只是想知道这是否可能。

+3

您是否真的确定是造成问题的潮水?如果你正在向一个文件写入大量数据(如果你使用iostream,你已经删除了'endl'而不是'\ n''),那么硬盘很可能是限制因素。如果受到硬盘驱动器实际速度的限制,刷新缓冲区将无济于事。 –

+0

这是一个有效的观点。在这种情况下,数据不会超过几兆字节,但对于其他可能导致问题的情况。有没有办法在C中要求操作系统分配RAM而不是页面文件? –

+1

读取/写入文件的最快方式之一是使用“内存映射文件”。这意味着您使用'mmap'(在Linux/MacOS /其他Unix)或'MapViewOfFile'(Windows),并写入内存而不是文件。我仍然怀疑刷新并不是真正的问题,但内存映射文件使用更好的接口将数据写入文件,因为它不需要对数据进行双重缓冲 - 它可以直接从内存页面写入它分配给该文件中的该位置。 –

回答

4

您可以通过调用setvbuf来增加缓冲区的大小。

+1

或者用相同的功能删除缓冲区并使用自己的缓冲区。当你超过缓冲区,比如1​​B时,这可以使你更好地控制并防止小的冲洗。 – Kelm