我想将指向文件行号的指针存储在一个数组中,然后我想从磁盘中检索指定的行。我不能直接存储指向行号的指针,因为当我读回文件时,内存位置会发生变化。因此,我改为存储文件开头的偏移量。为了存储我使用“uint_64t”的偏移量。但是,由于我的文件大小为 200GB,因此“uint_64t”无法表示所有偏移量。
我有以下问题:
除了存储偏移量之外,还有其他方法可以存储指向存储在磁盘上的文件的指针。
是否有其他一些我可以使用的数据结构(除了 uint64_t)。
在 POSIX 系统上,off_t
是文件偏移的标准类型。不过,它可能是 64 位类型,就像uint64_t
,因为它们可以毫无问题地保存 2e11 顺序的值。
你错了。Auint64_t
是 64 位的,因此您可以在文件中表示最多2^64 bytes = 18.45 exabytes
使用它的偏移量。根据 Wolfram Alpha 的说法,您可以将其与以下内容进行比较:
你的文件不可能有那么大。:)
一个 64 位无符号整数应该足够大,可以将字节偏移量存储到 200 GB 的文件中。
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(之前使用过)并得到准确的偏移值。