gpt4 book ai didi

c++ - 如何在 C++ 中创建文件映射?

转载 作者:行者123 更新时间:2023-11-28 03:05:26 31 4
gpt4 key购买 nike

我正在编写一个游戏预加载器(一个简单的程序,在启动程序之前将某些文件 [maps] 加载到缓存中。我被告知使用 CreateFileMapping,我仍然不确定它是将它加载到物理内存还是虚拟内存中.. .

无论如何,我应该把我需要加载的文件放在哪里?

这是我的代码(实际上是由其他人在堆栈溢出时告诉我使用它编写的)

#include <windows.h>
#include <cstdio>

void pf(const char* name) {

HANDLE file = CreateFile(name, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if(file == INVALID_HANDLE_VALUE) { printf("couldn't open %s\n", name); return; };

unsigned int len = GetFileSize(file, 0);

HANDLE mapping = CreateFileMapping(file, 0, PAGE_READONLY, 0, 0, 0);
if(mapping == 0) { printf("couldn't map %s\n", name); return; }

const char* data = (const char*) MapViewOfFile(mapping, FILE_MAP_READ, 0, 0, 0);

if(data)
{
printf("prefetching %s... ", name);

// need volatile or need to use result - compiler will otherwise optimize out whole loop
volatile unsigned int touch = 0;

for(unsigned int i = 0; i < len; i += 4096)
touch += data[i];
}
else
printf("couldn't create view of %s\n", name);

UnmapViewOfFile(data);
CloseHandle(mapping);
CloseHandle(file);
}

int main(int argc, const char** argv)
{
if(argc >= 2) for(int i = 1; argv[i]; ++i) pf(argv[i]);
return 0;
}

最佳答案

pf 函数接受文件路径作为其参数。触摸循环导致文件(或至少 4 KB 的部分)被加载到物理内存中。

关于c++ - 如何在 C++ 中创建文件映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19849400/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com