嵌入式算法13---大数据变长存储算法

本文探讨在嵌入式系统中,针对高精度采样结果的存储问题。由于标准C数据类型的限制,提出采用变长数据类型,根据数值范围动态分配存储空间,以节省内存。通过数据去冗余和编码标记,减少存储空间。两种编码方案——固定位和动态位——被提出,并分析了各自的适用场景。数据访问方面,建议将一维数组转换为二维数组,提高查找效率。该方法在资源有限的嵌入式设备中具有实际应用价值。

关键字:大数值存储 变长数据类型
摘要:嵌入式系统中涉及数据采集的,对采样结果定义合理的数据类型存储,可以节省空间,虽然会牺牲部分时间。

1、应用场景

对于高精度采样结果,其数值最大可能需要3字节,最少1字节,采用标准C的基础数据类型,U16太小无法满足需求,U32则浪费内存,当样本量很大时,其占用的空间问题便突显出来。
能否采用变长数据类型存储呢?对小数据采用U8,大数据采用U32,随着数值范围动态分配存储空间,就是本文的讨论的重点。

2、数据去冗余

U32的空间其数值范围最大接近2^32,该值非常大,实际数值范围远小于它,高位必然为0。
例如U32表示1使用0x00000001,前面位都是0,其表达的数值和U8的0x01是一样的,前面重复的一串0属于冗余数据区,是可以剔除的。

假设5个数据D0…4,原本每个数据固定为U32类型,将其高位冗余0去掉,再拼接到U8的一维数组,则占用的空间和大大缩小。思路的核心是把 U32 或者U64 数组压缩成U8 数组,同时确保使用时可根据U8 数组中存储的信息将对应的数值还原。
嵌入式系统
假设有0x00000001、0x00000101、0x00000001三个数据,其有效部分是0x01、0x0101、0x01,如果直接拼接在一起,则没法区分0x01010101的含义。因此数据在去掉高位0之后,还需进行编码标记,便于后续解析还原。

3、数据编码

数据编码的主要作用是标记当前数据占用多少连续字节,有两种方案:
1、固定2位(可以表示4种字节情况)来定义

一字节:00******
二字节:01****

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值