在c++中存储指向磁盘上文件行号的指针

storing pointers to line numbers of a file stored on disk in C++

本文关键字:文件 指针 磁盘 c++ 存储      更新时间:2023-10-16

我想在数组中存储指向文件行号的指针,然后我想从磁盘中检索指定的行。我不能直接存储行号的指针,因为当我读取文件时,内存位置会发生变化。因此,我将存储从文件开头开始的偏移量。为了存储偏移量,我使用"uint_64t"。然而,由于我的文件大小是200GB,因此"uint_64t"不能表示所有的偏移量。

我有以下问题:

  1. 除了存储偏移量之外,是否有其他方法可以存储存储在磁盘上的文件指针

  2. 是否有一些其他的数据结构,我可以使用(除了uint64_t)。

在POSIX系统上,off_t是文件偏移量的标准类型。但是,它可能是64位类型,就像uint64_t一样,因为它们可以毫无问题地保存2e11的值。

你错了。uint64_t是64位的,所以你可以用它来表示2^64 bytes = 18.45 exabytes文件中的偏移量。根据Wolfram Alpha,您可以将其与以下内容进行比较:

  • 估计人类所有知识的信息含量(截至1999年中期)(~ 12 EB)
  • 180 ×《星际迷航:下一代》中角色数据的存储容量(8×10^ 17b)

你的文件不可能那么大。:)

64位无符号整数应该足够大,可以将字节偏移量存储到一个200gb的文件中。

200 GB = 200 GB * 1024 MB/GB * 1024 KB/MB * 1024 Bytes/KB = 214,748,364,800 Bytes
但是,64位整数有一个范围:
Low: 0, High: 18,446,744,073,709,551,615

我不觉得有什么问题。您可以很容易地索引到该文件的每个字节。事实上,您可以索引文件的每个部分,并且仍然有很大的增长空间!

您可以遵循一些编码方案来存储偏移值。

的例子:文件偏移量值应除以2或4,并保存在uint64_t变量中。因此,数值范围应合理缩小。

在读取数据时,将uint64_t变量值乘以2或4(前面使用过),并获得确切的偏移值。