加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 09:35:58 所属栏目:百科 来源:网络整理
导读:我们在内存位置存储某种记录,如下所示 ----------------------------------------------|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.现在重复一遍.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读