【发布时间】:2016-05-10 18:22:30
【问题描述】:
坦率地说,我有一个任务非常含糊地说,
“如果文件存在,则单参数构造函数为文件中包含的记录数分配内存,并将它们复制到内存中。”
现在,在考虑这条指令时,我似乎要分配动态内存 /before/ 复制数据,这在原则上似乎是不可能的。
要动态分配内存,据我所知,您需要在运行时定义要保留的块大小。
鉴于文件大小或“条目”数量未知,怎么可能分配这么多内存?这个概念不是违背了动态分配的目的吗?
明智的解决方案,似乎唯一的选择是解析整个文件,确定大小,然后分配适当数量的内存,然后再次读取文件,将数据复制到分配的内存中。
鉴于这必须是任何读取文件数据的程序中的常见操作,我想知道:将文件加载到 RAM 中的正确或最有效的方法是什么?
读取一次以确定大小,然后再次复制的概念似乎非常低效。我认为有一种方法可以跳转到文件末尾以确定最大长度,这将使处理过程更快。或者也许使用静态缓冲区并将其以块的形式加载到 RAM?
是否可以读取所有数据,然后使用移动运算符将其移动到动态内存中?或者使用某种链接列表可能更有效?
【问题讨论】:
-
如果不查看示例文件的内容,很难提出任何有用的建议。
-
@RSahu 这只是一个文本文件。
-
@RSahu 字符长度未知。
-
如果记录大小是可变的,并且您必须预先分配所有内存,那么除了有效读取文件内容两次之外,别无他法。
标签: c++ file fstream move-semantics dynamic-allocation