CN113032291A - 优化数据内存分配的方法、及查找数据与改写数据的方法 - Google Patents
优化数据内存分配的方法、及查找数据与改写数据的方法 Download PDFInfo
- Publication number
- CN113032291A CN113032291A CN202110350895.1A CN202110350895A CN113032291A CN 113032291 A CN113032291 A CN 113032291A CN 202110350895 A CN202110350895 A CN 202110350895A CN 113032291 A CN113032291 A CN 113032291A
- Authority
- CN
- China
- Prior art keywords
- data
- bit
- current
- value
- byte
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Read Only Memory (AREA)
Abstract
Description
技术领域
本发明涉及计算机内存领域,具体涉及一种优化数据内存分配的方法、及查找数据与改写数据的方法。
背景技术
对于MCU中的数组而言,最小单元为1个字节,每个字节由8位构成,可表示256种状态,如图1。通常而言,对于一个存在N种状态的数据(其中N>0),每种状态都应该由一个不同的数值表示,那么对于每种状态的描述需要的最小字节数可用如下公式表示:INT[(N-1)/256]+1,总共需要的字节数为:(INT[(N-1)/256]+1)*M,M为内存决定参数,M>0,(其中INT[x]表示取x整数部分)。
例如对于状态数为32的数据,设置参数M=256,由于存在32种状态,每种状态所需的最小字节数为INT[(32-1)/256]+1=1,所需的RAM(随机存取存储器(random accessmemory),内存)空间为:(INT[(32-1)/256]+1)*256=256(字节);又如对于状态数为257的数据,设置参数M=256,所需要的RAM空间为512(字节)。
然而,对于状态数为32的数据,表示每种状态所需的字节数为1,每个状态可以用一个数值表示,如0,1,2…31表示该数据的32种状态,实际上每个字节中的有效位数为5,而该字节中剩下的3位为无效位,通常其值始终为0,如图2,显然剩下的3位无效位被浪费了,其内存的利用率较低,而在RAM非常小的MCU中,内存利用率较低可能导致成本增加,出现某些功能无法实现等问题。
发明内容
本发明的目的是提供一种优化数据内存分配的方法、及查找数据与改写数据的方法,实现了根据数据状态数以及数据参数为数据分配内存,极大地节约了内存空间,提高了内存的利用率。
本发明采取如下技术方案实现上述目的,优化数据内存分配的方法,包括:
若数据状态数为N,则每种状态所需的最小位数为a,a=INT[log2(N-1)]+1;
为所述数据分配b字节的内存空间。
查找数据的方法,应用于查找按照上述所述的优化数据内存分配的方法分配内存的数据,包括:
步骤1、若查找索引为i,则查找数据起始位置为s,s=i*a;
步骤3、确定起始字节c的位置偏移量d,d=s%8;
步骤4、从起始位s开始,根据位置偏移量值连续取a位数组合成二进制数,将二进制数的值作为索引i处的最终值。
进一步的是,所述从起始位s开始,根据位置偏移量连续取a位数组合成二进制数,将二进制数的值作为索引i处的值的具体方法包括:
步骤201、令当前字节c1=c,当前字节的起始位d1=d,当前未处理位数a1=a,索引i处的值v=0;
步骤202、计算当前字节c1的剩余位数r,r=8-d1;
步骤203、判断r是否小于当前未处理位数a1,若是,则进入步骤204;否则进入步骤208;
步骤204、取出当前字节c1从起始位d1开始连续r位的数,按照取出顺序组合成第一二进制数,并获取所述第一二进制数的值vh;
步骤206、令当前未处理位数a1=a1-r,当前字节c1=c1+1,当前字节的起始位d1=0;
步骤207、返回步骤202;
步骤208、取出当前字节c1从起始位d1开始连续a1位的数,按照取出顺序组合成第二二进制数,并获取所述第二二进制数的值ve;
改写数据的方法,应用于改写按照上述所述的优化数据内存分配的方法分配内存的数据,包括:
S1、若改写索引为i,则改写数据起始位置为s,s=i*a;
S3、确定起始字节c的位置偏移量d,d=s%8;
S4、从起始位s开始,根据位置偏移量值将连续a位数改写为目标值。
进一步的是,所述从起始位s开始,根据位置偏移量将连续a位数改写为目标值的具体方法包括:
步骤401、令当前字节c1=c,当前字节的起始位d1=d,当前未处理位数a1=a,目标值为c2;
步骤402、确定当前字节c1的剩余位数r,r=8-d1;
步骤403、判断r是否小于当前未处理位数a1,若是,则进入步骤404;否则进入步骤407;
步骤404、将当前字节c1从起始位d1位开始的连续r位用目标值c2从0位开始的连续r位替换;
步骤406、返回步骤402;
步骤407、将当前字节c1从起始位d1位开始的连续a1位用目标值c2替代。
本发明根据数据状态数以及数据参数为数据分配内存,对于状态数为32的数据,设置参数M=256,所需的内存仅为160字节,而目前的内存分配方法需要256字节,相对于现有技术,本发明极大地提高了内存的利用率,基于本发明优化数据内存分配的方法的数据查找及改写方法,提高了内存利用率,并进一步提高了数据查找以及改写的效率。
附图说明
图1是MCU的每个字节存储单元的示意图。
图2是最大状态数为32的数据的有效位使用情况。
图3是本发明优化数据内存分配的方法流程图。
图4是实施例2对应的示意图。
图5是实施例3对应的示意图。
图6是实施例3对应的示意图。
图7是实施例3对应的示意图。
具体实施方式
本发明优化数据内存分配的方法,其方法流程图如图3,包括:
步骤101、若数据状态数为N,则每种状态所需的最小位数为a,a=INT[log2(N-1)]+1;
步骤103、为所述数据分配b字节的内存空间。
查找数据的方法,应用于查找按照上述所述的优化数据内存分配的方法分配内存的数据,包括:
步骤1、若查找索引为i,则查找数据起始位置为s,s=i*a;
步骤3、确定起始字节c的位置偏移量d,d=s%8;
步骤4、从起始位s开始,根据位置偏移量值连续取a位数组合成二进制数,将二进制数的值作为索引i处的最终值。
步骤4中,从起始位s开始,根据位置偏移量连续取a位数组合成二进制数,将二进制数的值作为索引i处的值的具体方法包括:
步骤201、令当前字节c1=c,当前字节的起始位d1=d,当前未处理位数a1=a,索引i处的值v=0;
步骤202、计算当前字节c1的剩余位数r,r=8-d1;
步骤203、判断r是否小于当前未处理位数a1,若是,则进入步骤204;否则进入步骤208;
步骤204、取出当前字节c1从起始位d1开始连续r位的数,按照取出顺序组合成第一二进制数,并获取所述第一二进制数的值vh;
步骤206、令当前未处理位数a1=a1-r,当前字节c1=c1+1,当前字节的起始位d1=0;
步骤207、返回步骤202;
步骤208、取出当前字节c1从起始位d1开始连续a1位的数,按照取出顺序组合成第二二进制数,并获取所述第二二进制数的值ve;
改写数据的方法,应用于改写按照上述所述的优化数据内存分配的方法分配内存的数据,包括:
S1、若改写索引为i,则改写数据起始位置为s,s=i*a;
S3、确定起始字节c的位置偏移量d,d=s%8;
S4、从起始位s开始,根据位置偏移量值将连续a位数改写为目标值。
步骤S4中,所述从起始位s开始,根据位置偏移量将连续a位数改写为目标值的具体方法包括:
步骤401、令当前字节c1=c,当前字节的起始位d1=d,当前未处理位数a1=a,目标值为c2;
步骤402、确定当前字节c1的剩余位数r,r=8-d1;
步骤403、判断r是否小于当前未处理位数a1,若是,则进入步骤404;否则进入步骤407;
步骤404、将当前字节c1从起始位d1位开始的连续r位用目标值c2(二进制)从0位开始的连续r位替换;
步骤406、返回步骤402;
步骤407、将当前字节c1从起始位d1位开始的连续a1位用目标值c2(二进制)替代。
实施例1
实施例2
基于状态数N=400的数据,设置数据参数M=200,查找内存中的数据:
例如查找内存中索引i=13的数据,内存中结构示意图如4;
S101、计算起始位位置s=i*a=13*9=117;
S103、计算起始字节的位置偏移量d=s%8=117%8=5;
S104、令当前字节c1=c=14,当前字节的起始位d1=d=5,当前未处理位数a1=a=9,索引i处的值v=0;
S105、计算当前字节c1的剩余位数r,r=8-d1=3;
S106、r<a1成立,取出当前字节c1从起始位d1开始连续r位的数,按照取出顺序组合成第一二进制数,并获取所述第一二进制数的值vh,vh=5(二进制101);
S108、令当前未处理位数a1=a1-r=9-3=6,当前字节c1=c1+1=15,当前字节的起始位d1=0;
S109、计算当前字节c1的剩余位数:r=8-d1=8;
S110、r<a1不成立,取出当前字节c1从起始位d1开始连续a1位的数,按照取出顺序组合成第二二进制数(101010),并获取所述第二二进制数的值ve=42;
实施例3
基于状态数N=400的数据,设置数据参数M=200,改写内存中的数据:
例如,改写内存中索引i=13的数据为333,内存结构示意图如图5;
S201、计算起始位位置s=i*a=13*9=117;
S203、计算起始字节的位置偏移量d=s%8=117%8=5;
S204、令当前字节c1=c=14,当前字节的起始位d1=d=5,当前未处理位数a1=a=9,目标值c2=333(二进制:101001101);
S205、计算当前字节c1的剩余位数r,r=8-d1=3;
S206、r<a1成立,将当前字节c1从起始位d1位开始的连续r位用目标值c2从0位开始的连续r位(101)替换,如图6所示;
S208、计算当前字节c1的剩余位数r,r=8-d1=8;
S209、r<a1不成立,取出目标值,将当前字节c1从起始位d1位开始的连续a1位用目标值c2(二进制)替代,如图7所示。
本发明根据数据实际状态数以及相关数据参数来确定所需要的内存空间,相对于现有技术,更加节约内存空间;并且提供一种查找数据以及改写数据的方法,在查找数据以及改写数据时,都设置了当前字节的起始位以及当前剩余的位数,其中当前字节的起始位与选择的索引以及当前每个状态所需的最小位数相关联,能够更快定位所查找或改写数据的准确位置,进一步提高了查找以及改写的效率;
并且将当前字节的剩余位数与当前未处理位数进行比较,当前字节的剩余位数小于当前未处理位数时,循环查找,避免了出现遗漏的情况。
综上所述,实现了根据数据状态数以及数据参数为数据分配内存,极大地节约了内存空间,提高了内存的利用率以及数据查找与改写的效率。
Claims (5)
3.根据权利要求2所述的查找数据的方法,其特征在于,所述从起始位s开始,根据位置偏移量连续取a位数组合成二进制数,将二进制数的值作为索引i处的值的具体方法包括:
步骤201、令当前字节c1=c,当前字节的起始位d1=d,当前未处理位数a1=a,索引i处的值v=0;
步骤202、计算当前字节c1的剩余位数r,r=8-d1;
步骤203、判断r是否小于当前未处理位数a1,若是,则进入步骤204;否则进入步骤208;
步骤204、取出当前字节c1从起始位d1开始连续r位的数,按照取出顺序组合成第一二进制数,并获取所述第一二进制数的值vh;
步骤206、令当前未处理位数a1=a1-r,当前字节c1=c1+1,当前字节的起始位d1=0;
步骤207、返回步骤202;
步骤208、取出当前字节c1从起始位d1开始连续a1位的数,按照取出顺序组合成第二二进制数,并获取所述第二二进制数的值ve;
5.根据权利要求4所述的改写数据的方法,其特征在于,所述从起始位s开始,根据位置偏移量将连续a位数改写为目标值的具体方法包括:
步骤401、令当前字节c1=c,当前字节的起始位d1=d,当前未处理位数a1=a,目标值为c2;
步骤402、确定当前字节c1的剩余位数r,r=8-d1;
步骤403、判断r是否小于当前未处理位数a1,若是,则进入步骤404;否则进入步骤407;
步骤404、将当前字节c1从起始位d1位开始的连续r位用目标值c2从0位开始的连续r位替换;
步骤406、返回步骤402;
步骤407、将当前字节c1从起始位d1位开始的连续a1位用目标值c2替代。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110350895.1A CN113032291B (zh) | 2021-03-31 | 2021-03-31 | 查找数据与改写数据的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110350895.1A CN113032291B (zh) | 2021-03-31 | 2021-03-31 | 查找数据与改写数据的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113032291A true CN113032291A (zh) | 2021-06-25 |
CN113032291B CN113032291B (zh) | 2023-05-26 |
Family
ID=76453177
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110350895.1A Active CN113032291B (zh) | 2021-03-31 | 2021-03-31 | 查找数据与改写数据的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113032291B (zh) |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101043421A (zh) * | 2006-03-21 | 2007-09-26 | 上海激动通信有限公司 | 一种基于内存的ip地址最长匹配快速查找的方法 |
CN102184165A (zh) * | 2011-04-22 | 2011-09-14 | 烽火通信科技股份有限公司 | 一种节省内存的lcs算法 |
CN102541758A (zh) * | 2011-12-22 | 2012-07-04 | 深圳市融创天下科技股份有限公司 | 一种内存分配与释放的方法、系统和终端设备 |
CN103077017A (zh) * | 2012-12-27 | 2013-05-01 | 惠州市德赛西威汽车电子有限公司 | 一种嵌入式内存复用方法 |
CN103678152A (zh) * | 2014-01-08 | 2014-03-26 | 广州思泰信息技术有限公司 | 一种小内存微型控制器零碎片的动态内存分配方法 |
US20160357664A1 (en) * | 2014-12-14 | 2016-12-08 | Via Alliance Semiconductor Co., Ltd. | Multi-mode set associative cache memory dynamically configurable to selectively allocate into all or a subset of its ways depending on the mode |
CN108647150A (zh) * | 2018-04-14 | 2018-10-12 | 温州职业技术学院 | 一种内存管理方法及系统 |
CN110287190A (zh) * | 2019-06-25 | 2019-09-27 | 四川深度在线广告传媒有限公司 | 一种大数据分析自定义编码储存结构及编码、解码方法 |
CN110795247A (zh) * | 2019-10-28 | 2020-02-14 | 天津津航计算技术研究所 | 一种应用于mcu的高效动态内存管理方法 |
CN111552651A (zh) * | 2020-06-28 | 2020-08-18 | 江苏金智科技股份有限公司 | 一种物联网终端轻量级操作系统的混合内存管理方法 |
CN111880991A (zh) * | 2020-07-23 | 2020-11-03 | Oppo广东移动通信有限公司 | 内存优化方法、装置、电子设备及计算机可读存储介质 |
-
2021
- 2021-03-31 CN CN202110350895.1A patent/CN113032291B/zh active Active
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101043421A (zh) * | 2006-03-21 | 2007-09-26 | 上海激动通信有限公司 | 一种基于内存的ip地址最长匹配快速查找的方法 |
CN102184165A (zh) * | 2011-04-22 | 2011-09-14 | 烽火通信科技股份有限公司 | 一种节省内存的lcs算法 |
CN102541758A (zh) * | 2011-12-22 | 2012-07-04 | 深圳市融创天下科技股份有限公司 | 一种内存分配与释放的方法、系统和终端设备 |
CN103077017A (zh) * | 2012-12-27 | 2013-05-01 | 惠州市德赛西威汽车电子有限公司 | 一种嵌入式内存复用方法 |
CN103678152A (zh) * | 2014-01-08 | 2014-03-26 | 广州思泰信息技术有限公司 | 一种小内存微型控制器零碎片的动态内存分配方法 |
US20160357664A1 (en) * | 2014-12-14 | 2016-12-08 | Via Alliance Semiconductor Co., Ltd. | Multi-mode set associative cache memory dynamically configurable to selectively allocate into all or a subset of its ways depending on the mode |
CN108647150A (zh) * | 2018-04-14 | 2018-10-12 | 温州职业技术学院 | 一种内存管理方法及系统 |
CN110287190A (zh) * | 2019-06-25 | 2019-09-27 | 四川深度在线广告传媒有限公司 | 一种大数据分析自定义编码储存结构及编码、解码方法 |
CN110795247A (zh) * | 2019-10-28 | 2020-02-14 | 天津津航计算技术研究所 | 一种应用于mcu的高效动态内存管理方法 |
CN111552651A (zh) * | 2020-06-28 | 2020-08-18 | 江苏金智科技股份有限公司 | 一种物联网终端轻量级操作系统的混合内存管理方法 |
CN111880991A (zh) * | 2020-07-23 | 2020-11-03 | Oppo广东移动通信有限公司 | 内存优化方法、装置、电子设备及计算机可读存储介质 |
Non-Patent Citations (1)
Title |
---|
吴文峰: "嵌入式实时系统动态内存分配管理器的设计与实现", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Also Published As
Publication number | Publication date |
---|---|
CN113032291B (zh) | 2023-05-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110413611B (zh) | 数据存储、查询方法及装置 | |
CN1147866C (zh) | 含多级单元的快擦存储器的读出电路 | |
CN103782266B (zh) | 针对存储器持久性操作的设备及方法 | |
CN102110171B (zh) | 基于树形结构的布鲁姆过滤器的查询与更新方法 | |
CN112817538B (zh) | 数据处理的方法、装置、设备和存储介质 | |
CN113741858B (zh) | 存内乘加计算方法、装置、芯片和计算设备 | |
US7627616B2 (en) | Database storage and maintenance using row index ordering | |
CN116051156B (zh) | 一种基于数字孪生的新能源动态电价数据管理系统 | |
US6901476B2 (en) | Variable key type search engine and method therefor | |
CN113032291A (zh) | 优化数据内存分配的方法、及查找数据与改写数据的方法 | |
JPS6315619B2 (zh) | ||
JP2001527240A (ja) | データ構造内の管理 | |
CN116701440B (zh) | 一种布谷鸟过滤器及数据插入、查询、删除方法 | |
CN115841094A (zh) | 一种编码方法、装置、设备、介质及产品 | |
CN114969023A (zh) | 一种数据库学习型索引构建方法和系统 | |
CN101271466B (zh) | 一种基于自适应字典树的电子词典单词检索方法 | |
CN108647289B (zh) | 基于布谷哈希和布隆过滤器的Hash建表方法 | |
CN112802553A (zh) | 一种基于后缀树算法的基因组测序序列与参考基因组比对的方法 | |
US7773003B1 (en) | Huffman search algorithm for AAC decoder | |
CN111625760A (zh) | 基于闪存电学特性的存算一体方法 | |
KR102442943B1 (ko) | 인-메모리 확률적 라운더 | |
CN112817530B (zh) | 一种多线程安全高效读写有序数据的方法 | |
CN110543494B (zh) | 基于缓存表构建可达图的方法 | |
CN113676189B (zh) | 一种ldpc译码器的最小值计算装置及方法 | |
CN113051302B (zh) | 面向总体设计的多维数据匹配方法、装置及计算机存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |