以正确的顺序读取内存需要一些帮助

以正确的顺序读取内存需要一些帮助,第1张

概述我们在内存位置存储某种记录,如下所示 ----------------------------------------------|EventID | Timestamp | Variable Data | Length |---------------------------------------------- 这些字段的长度如下 EventID时间戳是12个字节 长度字段为4个字节,表 我们在内存位置存储某种记录,如下所示

----------------------------------------------|EventID | Timestamp | Variable Data | Length  |----------------------------------------------

这些字段的长度如下

EventID时间戳是12个字节
长度字段为4个字节,表示数据字段的长度.

数以百万计的这类记录一个接一个地放在一起.我有一个指向当前索引的指针,所以如果我想读取所有记录,我就这样读了4个字节从右到左&我取了那个特别的记录&迭代地这样做我读了完整的内存空间.但是这种方法的问题在于,与输入的顺序相比,它以相反的顺序读取记录.

我需要设置一个方法,这个方法允许我以最小的空间复杂度输入相同的顺序读取这些内存记录.

解决方法 由于可变长度数据部分位于长度之前,因此不可能从开始存储器地址开始读取数据.假设不能对体系结构或存储进行任何更改,一种可能的选择是使用当前系统来构建可变数据长度的索引.然后,一旦到达数据的开头,您就会以正确的顺序读取记录 – 使用先前构建的索引来确定可变数据长度.

但是,您提到此数据集包含数百万条记录.因此,在处理之前存储所有可变数据长度的索引可能是不可行的.这个问题的一个解决方案是仅对每个其他条目或每四分之一,八等进行索引……具体取决于您的具体要求.然后你可以从每个索引记录开始,向后工作暂时保存数据长度,直到你达到你没有处理的记录.然后使用此保存的数据再次前进.

例如,假设您为第一次传递的每8条记录编制索引.然后,您将从记录8开始并保存该记录的长度.然后转到7,6,5,4,3,2,1.现在你已经保存了接下来的8个长度.所以过程记录1,7和8.现在,你不知道9的长度 – 所以跳到16.然后记录16,15,14,…,9长度.然后再如前一个过程9,10,11 …… 16.现在重复一遍.

总结

以上是内存溢出为你收集整理的以正确的顺序读取内存需要一些帮助全部内容,希望文章能够帮你解决以正确的顺序读取内存需要一些帮助所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1214010.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存