有一种方法能够直接读取二进制文件到RAM?

我的意思是,有没有办法告诉编译器,这里的文件,这里的RAM块,请把该文件的内容在RAM中,就行了,很快,你可以请。

目前我通过与ifstream的加载到RAM 64位块(阵列)的64位块中的文件步进。但我想,因为它是这样的,必须慢下来用顶针出来的水的杯子(文件)的保释成壶(在RAM),而不是仅仅拿起杯子和(这里来比喻)倾翻的全部内容到壶中一气呵成。

作为一个相对较新的这个我可能完全对这个错误的想法 - 任何指导做好将是一个很大的帮助。

我刚刚得到一个大的文件到内存的最快方法后很。

由于

有帮助吗?

解决方案

什么可以阻止用户读取文件中的一个通行证?难道它适合在内存太大了?

您还可以使用映射文件,UNIX:MMAP的Windows:的CreateFileMapping

其他提示

我想你需要的是内存映射文件,但是API取决于哪个操作系统你是在UNIX我相信这是mmap()的。

mmap 应该为你工作。大多数的实现实际上并不读取文件,直到您引用的实际内存页,但在任何情况下,如果它是在RAM中所有的时间,你可以访问该文件的内容。

你不说你是在哪个平台上,但是这听起来像内存映射文件的工作。

您的程序定虚拟内存 - 有些是被映射到RAM,一些到交换文件,你不能做这件事。然而可以减少使用文件系统接口通过仅仅复制更大的块的开销 - 几兆例如

我不知道如果这是你在问什么,而是要加快从你可以缓冲更多的字节的文件中读取。 fstream的的read()方法的第二个参数可以被设置为指定输入大小。给他,例如,一个32K(32 *(2 ^ 10))值可以加快读取处理。我建议你做一些基准测试不同的缓冲区大小。

如果你的意思是“避免把文件上的交换,把它总是以RAM”我认为你可以,因为这是后话了OS照顾。

看在DirectX SDK的ContentStreaming例子。

它使用的文件映射的方法。显然,它使用Windows API,但你可以找到其他平台相应的API以及

有趣的是,它表明你在上下文中的方法。 (在/寻呼在一个巨大的模型的部分点播读数(在这种情况下地形)

升压提供跨平台支持用于存储器映射文件,除其他事项外...

升压内存映射文件

scroll top