gpt4 book ai didi

c++ - C++中文件数据的动态分配

转载 作者:行者123 更新时间:2023-11-28 05:51:40 25 4
gpt4 key购买 nike

坦率地说,我有一个作业非常模糊地说,

“如果文件存在,单参数构造函数为文件中包含的记录数分配内存并将它们复制到内存中。”

现在,在考虑这条指令时,似乎我要分配动态内存/之前/复制数据,这在原则上似乎是不可能的。

据我所知,要动态分配内存,您需要运行时定义要保留的 block 的大小。

鉴于文件大小或“条目”数量未知,如何分配那么多内存?这个概念不会违背动态分配的目的吗?

明智的解决方案,似乎唯一的选择是解析整个文件,确定大小,然后分配适当数量的内存,然后再次读取文件,将数据复制到分配的内存中。

鉴于这一定是任何读取文件数据的程序中的常见操作,我想知道:将文件加载到 RAM 中的正确或最有效的方法是什么?

读取一次以确定大小,然后再次复制的概念似乎非常低效。我假设有一种方法可以跳到文件末尾以确定最大长度,这将使过程更快。或者可能使用静态缓冲区并将其以 block 的形式加载到 RAM 中?

是否可以读取所有数据,然后使用 move 运算符将其 move 到动态内存中?或者使用某种链表可能更有效?

最佳答案

最有效的方法是让操作系统将文件映射到内存。在您的操作系统 API 中搜索“mmap”或“内存映射”。

另一种方法是查找文件末尾并获取位置 ( tellg() )。这是文件的大小。在动态内存中分配一个数组或创建一个 std::vector至少保留此空间量。

某些操作系统具有 API,您可以调用该 API 来获取文件的大小(无需搜索到末尾)。您可以使用此方法,然后动态分配内存或使用 std::vector<char> .

如果文件不适合内存,您将需要制定一个计划。

如果你需要将整个文件读入内存,你可以使用istream::read使用文件长度。

关于c++ - C++中文件数据的动态分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35145126/

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