c++ - 将磁盘文件的一部分放入特定(预分配)内存地址的最快方法 Windows/C++?

标签 c++ windows file native

你好。

我在 native Windows 中工作。那就是说我正在寻找一个函数,其原型(prototype)是这样的:

void getData(uint8_t* p, std::string const& fn, size_t off, 
    size_t s, boost::function<void()> const& F);

所以我有一大块内存,预先分配在堆上(使用新的)。我在磁盘上有一个文件。我想指定一个指向我的内存块的指针(“p”)、一个文件名(“fn”)和其中的偏移量(“off”)、一个大小(“s”)和一个回调(“F”) .当我的内存“p”已被文件“fn”中偏移量“off”处的“s”字节填充时,我希望子程序最终调用“F”。我会保证“p”、“s”和“off”与 2 的某个预定义幂对齐,但我不希望发生可能避免的复制。理想情况下,它会将数据从磁盘直接 DMA 到我的位置。

我研究了文件的内存映射,但这需要将数据从映射区域复制到我的“p”中。没有更快的方法吗?

最佳答案

为什么不直接使用 MapViewOfFileEx 的内存映射呢? ?

您可以使用 p 作为 lpBaseAddress 参数来将文件映射到进程地址空间中您想要的任何位置。

关于c++ - 将磁盘文件的一部分放入特定(预分配)内存地址的最快方法 Windows/C++?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4347918/

相关文章:

file - WinForms 相当于 Java 的 JFileChooser.FILES_AND_DIRECTORIES

c++ - 循环中的随机函数

c++ - Qt 单元测试 : why "qmake" is not recognized

C++ toString 输出整数

android - 在所有 3 个平台(android、ios、windows 手机)上推送通知

c - 通过线程之间的环形(Circular)缓冲区发送消息(C语言)

c - 包含多于指定字符的数组

从 Linux 目录中删除点文件的 PHP 脚本

c++ - 将 false 转换为指针类型 void*?

c++ - LibVLC 访问冲突