gpt4 book ai didi

c++ - 如何在一次操作中从/向文件读取/写入固定数量的整数(尽可能快,文件可以假定为二进制)?

转载 作者:行者123 更新时间:2023-12-02 10:04:43 24 4
gpt4 key购买 nike

我有一个大文件(假设我可以将其设为二进制),无法放入 RAM,我想从中对数字进行排序。在此过程中,我需要快速从文件中读取/写入大量数字(从/到 vector<int>int[] ),所以我不想一一读取/写入,而是读取/用固定大小的 block 写入。我该怎么做?

最佳答案

I have a big file (let's assume I can make it binary), that can not fit in RAM, and I want to sort numbers from it.



鉴于文件是二进制文件,也许最简单且可能有效的解决方案是对文件进行内存映射。不幸的是,没有标准的接口(interface)来执行内存映射。在 POSIX 系统上,有 mmap功能。

现在,内存映射文件只是一个原始字节数组。技术上不允许将其视为整数数组,直到 C++20 引入了 C 风格的“隐式创建低级对象”。在实践中,这已经适用于大多数当前的语言实现注 1。

为了使这种重新解释起作用,文件中整数的表示必须与 CPU 使用的整数表示相匹配。该文件不能移植到在其他不兼容系统上运行的同一程序。

我们可以简单地使用 std::sort在这个数组上。操作系统应该负责将文件分页进出内存。 std::sort 使用的算法但是,不一定针对此用例进行优化。要找到最佳算法,您可能需要做一些研究。

1 如果关注 C++20 之前的标准一致性,可以遍历数组,将底层字节复制到一个整数中,使用复制的整数作为新值将整数对象放置到内存中。编译器可以将这些操作优化为零指令,这使得程序的行为得到很好的定义。

关于c++ - 如何在一次操作中从/向文件读取/写入固定数量的整数(尽可能快,文件可以假定为二进制)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60855810/

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