CN114942896A - 一种c语言内存块的管理方法及终端 - Google Patents
一种c语言内存块的管理方法及终端 Download PDFInfo
- Publication number
- CN114942896A CN114942896A CN202210440122.7A CN202210440122A CN114942896A CN 114942896 A CN114942896 A CN 114942896A CN 202210440122 A CN202210440122 A CN 202210440122A CN 114942896 A CN114942896 A CN 114942896A
- Authority
- CN
- China
- Prior art keywords
- memory block
- memory
- check mark
- check
- description object
- 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.)
- Pending
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/14—Protection against unauthorised use of memory or access to memory
- G06F12/1416—Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
- G06F12/1425—Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being physical, e.g. cell, word, block
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1004—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's to protect a block of data words, e.g. CRC or checksum
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本发明公开了一种C语言内存块的管理方法及终端,对内存块建立管理对象,包括内存块描述对象和内存块校验标志,通过对内存块完整描述为一个对象,增加校验功能,以便于对其进行管理。通过基于内存块管理对象的函数组来进行内存块操作,通过函数基于内存块对应的内存块描述对象,保证内存操作的安全性,通过函数自动进行内存的校验,监测内存越界;并且与直接指针访问内存块相比,通过在函数组操作阶段进行内存越界等检测,省去独立模块对内存越界进行定时检测,同时提供了各种常见的内存操作方法,从而开发人员能够更专注于具体功能逻辑的实现,提高开发效率。
Description
技术领域
本发明涉及内存管理技术领域,特别涉及一种C语言内存块的管理方法及终端。
背景技术
在C语言编程中,内存访问越界是最常见且最难排查的问题。越界,按访问方式,分为读越界和写越界;按溢出类型,分为跨内存块访问和跃内存块访问。
现有技术中一般直接通过指针来访问内存数据。在正常情况下,指针仅会访问所在内存块的内部空间。越界一般是两种情况,一种是指针访问的空间从所在内存块跨入相邻的内存块,即指针会经过所在内存块的边界;另一种是指针直接跃入其它内存块,即指针不经过所在内存块的边界。
内存还分只读和可读写两种。其中只读内存一般用来存储程序和资源,可读写内存一般用来存储变量和数据。可读写内存分静态区和动态区,动态区又分堆和栈两种。提到内存越界问题,多数是特指写越界的情况。
为应对内存越界问题,基本有两个方向。一个方向是规避,即通过一些方法,避免越界问题的发生;另一个方向是监控,即设置监测点,以便在问题发生后能够及时发出警报。
现有方案中,规避一般是通过编程规范和代码审查等管理类的方案,但是这种方案容易疏漏,并且实施困难;监控一般是在内存块边界上增加标志,通过检查标志识别是否发生越界,目前在具体实施上有两个方向,一个是对内存分配函数进行改造,一个是对内存池进行改造,但监控作用有限,且范围局限于堆内存。
发明内容
本发明所要解决的技术问题是:提供一种C语言内存块的管理方法及终端,能够避免内存越界的情况,提高内存块管理的可靠性。
为了解决上述技术问题,本发明采用的技术方案为:
一种C语言内存块的管理方法,包括步骤:
对内存块建立内存块管理对象,所述内存块管理对象包括内存块描述对象和内存块校验标志,所述内存块描述对象为描述所述内存块的结构体;
建立基于所述内存块管理对象的函数组,通过所述函数组基于所述内存块描述对象进行所述内存块的安全访问,并且基于所述内存块校验标志进行所述内存块的越界检测。
为了解决上述技术问题,本发明采用的另一种技术方案为:
一种C语言内存块的管理终端,包括存储器、处理器以及存储在所述存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
对内存块建立内存块管理对象,所述内存块管理对象包括内存块描述对象和内存块校验标志,所述内存块描述对象为描述所述内存块的结构体;
建立基于所述内存块管理对象的函数组,通过所述函数组基于所述内存块描述对象进行所述内存块的安全访问,并且基于所述内存块校验标志进行所述内存块的越界检测。
从上述描述可得,本发明的有益效果在于:使用内存块描述对象替代指针,避免直接使用指针可能带来的各种问题,实现了内存块的安全访问。配套函数组可以通过内存块描述对象获取到完整的内存块信息,避免了内存越界的发生。并且函数组会对传入的内存块进行校验,这样可以省去额外的对内存块进行定时检查的独立模块,降低使用成本。函数组可以提供常用的内存访问方法,并根据实际需要进行扩展,为程序员提供安全和便利,使其更专注于具体功能逻辑的实现,提高开发效率。
附图说明
图1为本发明实施例的一种C语言内存块的管理方法的流程图;
图2为本发明实施例的一种C语言内存块的管理终端的示意图;
图3为现有技术中内存块的信息结构图;
图4为本发明实施例的创建内存块管理对象的流程图;
图5为本发明实施例中内存块的信息结构图;
图6为本发明实施例中内存块按项或区域读写的示意图;
图7为本发明实施例中内存块中存储项的追加和弹出示意图;
标号说明:
1、一种C语言内存块的管理终端;2、存储器;3、处理器。
具体实施方式
为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。
请参照图1,本发明实施例提供了一种C语言内存块的管理方法,包括步骤:
对内存块建立内存块管理对象,所述内存块管理对象包括内存块描述对象和内存块校验标志,所述内存块描述对象为描述所述内存块的结构体;
建立基于所述内存块管理对象的函数组,通过所述函数组基于所述内存块描述对象进行所述内存块的安全访问,并且基于所述内存块校验标志进行所述内存块的越界检测。
从上述描述可得,使用内存块描述对象替代指针,避免直接使用指针可能带来的各种问题,实现了内存块的安全访问。配套函数组可以通过内存块描述对象获取到完整的内存块信息,避免了内存越界的发生。并且函数组会对传入的内存块进行校验,这样可以省去额外的对内存块进行定时检查的独立模块,降低使用成本。函数组可以提供常用的内存访问方法,并根据实际需要进行扩展,为程序员提供安全和便利,使其更专注于具体功能逻辑的实现,提高开发效率。
进一步地,所述对内存块建立内存块管理对象包括:
根据内存块管理对象创建函数为内存块创建对应的内存块管理对象,若内存块为只读类型,则建立仅包含内存块描述对象的内存管理对象;
若内存块为可读写类型,则判断所述内存块是否需要校验,若是,则建立包含内存块描述对象和内存块校验标志的内存块管理对象,否则,建立仅包含内存块描述对象的内存管理对象。
从上述描述可得,创建内存块管理对象时,支持只读和可读写内存,实现了对各类内存的全面支持。只要通过创建内存块管理对象函数将对应内存块纳入管理即可。
进一步地,所述内存块校验标志包括静态校验标志或者动态校验标志:
根据校验需求判断是否生成静态校验标志,若是,则选择固定值或者使用算法生成特征值作为静态校验标志;
根据校验需求判断是否生成动态校验标志,若是,则根据所述内存块的存储内容生成校验值。
从上述描述可得,可读写内存包括静态内存和动态内存,因此能够根据静态内存和动态内存的校验需求生成静态校验标志或者动态校验标志,以便于后续适应性地进行越界检测。
进一步地,所述基于所述内存块校验标志进行所述内存块的越界检测包括:
若所述内存块校验标志包括静态校验标志,则判断所述静态校验标志是否发生变化,若是,则所述内存块存在跨内存块越界;
若所述内存块校验标志包括动态校验标志,则根据所述内存块的当前存储内容生成测试校验和,判断所述动态校验标志中的校验值与所述测试校验和是否一致,若否,则所述待操作内存块存在跃内存块越界。
从上述描述可得,校验标志存放于内存块的边界上,可选配静态方式或动态方式,静态标志方式可以监测跨内存块的越界,动态标志方式可以监测跃内存块的越界,从而实现了完备的内存块越界监测。
进一步地,通过所述函数组基于所述内存块描述对象进行所述内存块的安全访问包括:
所述内存块描述对象包括内存块的起始地址、大小,类型,还包括内存块的存储项个数和存储项大小;
将所述内存块描述对象传入所述函数组中的功能函数,通过所述功能函数得到所述内存块的有效边界,并基于所述有效边界进行所述内存块的安全访问;
当所述内存块传递给需要通过指针访问内存的模块时,在内存块的存储内容被修改后更新内存块描述对象。
从上述描述可得,仍保留对直接指针方式访问内存块的支持。内存块起始地址是内存块描述对象的成员项,可以作为参数与仍直接采用指针方式的其它模块无缝对接。
请参照图2,本发明另一实施例提供了一种C语言内存块的管理终端,包括存储器、处理器以及存储在所述存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
对内存块建立内存块管理对象,所述内存块管理对象包括内存块描述对象和内存块校验标志,所述内存块描述对象为描述所述内存块的结构体;
建立基于所述内存块管理对象的函数组,通过所述函数组基于所述内存块描述对象进行所述内存块的安全访问,并且基于所述内存块校验标志进行所述内存块的越界检测。
从上述描述可得,使用内存块描述对象替代指针,避免直接使用指针可能带来的各种问题,实现了内存块的安全访问。配套函数组可以通过内存块描述对象获取到完整的内存块信息,避免了内存越界的发生。并且函数组会对传入的内存块进行校验,这样可以省去额外的对内存块进行定时检查的独立模块,降低使用成本。函数组可以提供常用的内存访问方法,并根据实际需要进行扩展,为程序员提供安全和便利,使其更专注于具体功能逻辑的实现,提高开发效率。
进一步地,所述对内存块建立内存块管理对象包括:
根据内存块管理对象创建函数为内存块创建对应的内存块管理对象,若内存块为只读类型,则建立仅包含内存块描述对象的内存管理对象;
若内存块为可读写类型,则判断所述内存块是否需要校验,若是,则建立包含内存块描述对象和内存块校验标志的内存块管理对象,否则,建立仅包含内存块描述对象的内存管理对象。
从上述描述可得,创建内存块管理对象时,支持只读和可读写内存,实现了对各类内存的全面支持。只要通过创建内存块管理对象函数将对应内存块纳入管理即可。
进一步地,所述内存块校验标志包括静态校验标志或者动态校验标志:
根据校验需求判断是否生成静态校验标志,若是,则选择固定值或者使用算法生成特征值作为静态校验标志;
根据校验需求判断是否生成动态校验标志,若是,则根据所述内存块的存储内容生成校验值。
从上述描述可得,可读写内存包括静态内存和动态内存,因此能够根据静态内存和动态内存的校验需求生成静态校验标志或者动态校验标志,以便于后续适应性地进行越界检测。
进一步地,所述基于所述内存块校验标志进行所述内存块的越界检测包括:
若所述内存块校验标志包括静态校验标志,则判断所述静态校验标志是否发生变化,若是,则所述内存块存在跨内存块越界;
若所述内存块校验标志包括动态校验标志,则根据所述内存块的当前存储内容生成测试校验和,判断所述动态校验标志中的校验值与所述测试校验和是否一致,若否,则所述待操作内存块存在跃内存块越界。
从上述描述可得,校验标志存放于内存块的边界上,可选配静态方式或动态方式,静态标志方式可以监测跨内存块的越界,动态标志方式可以监测跃内存块的越界,从而实现了完备的内存块越界监测。
进一步地,通过所述函数组基于所述内存块描述对象进行所述内存块的安全访问包括:
所述内存块描述对象包括内存块的起始地址、大小,类型,还包括内存块的存储项个数和存储项大小;
将所述内存块描述对象传入所述函数组中的功能函数,通过所述功能函数得到所述内存块的有效边界,并基于所述有效边界进行所述内存块的安全访问;
当所述内存块传递给需要通过指针访问内存的模块时,在内存块的存储内容被修改后更新内存块描述对象。
从上述描述可得,仍保留对直接指针方式访问内存块的支持。内存块起始地址是内存块描述对象的成员项,可以作为参数与仍直接采用指针方式的其它模块无缝对接。
本发明上述的一种C语言内存块的管理方法及终端,适用于在C语言中对内存块进行管理,避免发生内存越界的情况,以下通过具体的实施方式进行说明:
实施例一
请参照图1、图3至图5,一种C语言内存块的管理方法,包括步骤:
S1、对内存块建立内存块管理对象,所述内存块管理对象包括内存块描述对象和内存块校验标志,所述内存块描述对象为描述所述内存块的结构体变量;所述内存块校验标志有静态和动态两种,存放在内存块边界上。
S11、根据内存块管理对象创建函数为内存块创建对应的内存块管理对象,若所述内存块的类型为可读写类型,则进一步判断是否为堆内存,若是则直接申请,否则内存块由外部传入;判断所述内存块是否需要校验,若是,则在内存块边界处增加静态或动态校验标志,并返回内存块描述对象,否则,直接返回内存块描述对象。
具体的,请参照图3,现有技术中内存块的信息包括内存块的起始地址和大小,其中起始地址和大小信息都是独立信息,分散在代码中。
请参照图4,本实施例中为内存块创建了内存块管理对象,具体的,若内存块为可读写类型内存块,若有指定初始值,则内存块使用指定值进行初始化,若没有指定初始值,则内存块使用默认值进行初始化。判断可读写类型内存块是否需要校验,若是,则在内存块边界处增加静态或动态校验标志,并返回内存块描述对象,否则,直接返回内存块描述对象。
S12、若所述内存块的类型为只读类型,则直接返回内存块描述对象。
具体的,请参照图4,若内存块为只读类型内存块,由于只读内存块不需要进行写操作,只需要通过合法性判断保证内存访问的安全性,因此直接返回内存块描述对象。
S2、建立基于内存块管理对象的函数组,组内功能函数包含内存块安全访问和内存越界监测。安全访问依赖于内存块描述对象提供的完整内存块描述信息,内存越界监测依赖于内存块的校验标志。
具体的,步骤S2包括:
通过函数基于所述内存块描述对象进行内存块的安全访问,基于所述内存块的校验标识进行内存块的越界检测。
其中,请参照图5,内存块描述对象的成员项包括内存块的起始地址、大小和类型,在本实施例中,内存块的类型如表1所示;校验方式包括静态校验标志和动态校验标志,动态校验标志与内存块存储内容同步更新。
表1内存块的类型
其中,函数组包含但不限于用于创建和删除内存块的必备函数、用于内存块拷贝和值设置的基础函数以及校验函数。
在本实施例中,内存块对象的创建函数为:
mem_t MemNew(void*ptr,int size,int count,int len,unsigned int type);
创建时的参数直接对应结构体的成员变量。当内存块为MEM_TYPE_VAR类型时,需要申请内存。创建完,返回mem_t类型结构体。
内存块对象的删除函数为:
int MemDel(mem_t mem);
当内存块为MEM_TYPE_VAR类型时,需要释放内存。
内存块的基础读写操作函数为:
void*MemItem(mem_t*pMem,int index);
类似于数组的访问方式,十分方便。index参数就可以使用负数,如-1表示内存块最后一个有效项的索引。
S21、将所述内存块描述对象传入所述函数组中的功能函数,通过所述功能函数得到所述内存块的有效边界,并基于所述有效边界进行所述内存块的安全访问。
具体的,函数获取到内存块的起始地址、大小和类型,根据上述信息与内存块计划进行的操作进行比对,根据比对结果判断内存块操作的合法性和有效性,以保证所有内存操作仅发生在内存块的有效边界内部,从而避免了内存越界的发生,即通过函数组访问内存可以解决安全性的问题。
S22、判断所述内存块的静态校验标志是否发生变化,若是,则所述内存块存在跨内存块越界,否则,所述内存块不存在跨内存块越界。
具体的,函数组会对内存块静态校验标志进行检测,以识别是否发生了跨内存块越界。
在本实施例中,由于多数的越界情况是在内存块尾部发生越界,因此将固定标志添加在内存块尾,在一些实施例中也可以根据需要在内存块头部增加固定标识。静态标志可以采用固定值,也可以用算法生成一个特征值。内存块一旦发生写越界,固定标志就可能会被修改。即,通过判断固定标志的值是否变化,来识别内存块是否发生了写越界。
S23、根据所述内存块的存储内容生成测试校验和,判断所述动态校验标志与所述测试校验和是否一致,若是,则所述内存块不存在跃内存块越界,否则,所述待操作内存块存在跃内存块越界。
具体的,使用校验算法,例如LRC校验(Longitudinal Redundancy Check,纵向冗余校验),为内存块生成一个校验和。校验和与内存块内的数据同步更新。这样,内存块对象每次使用前都先核对一下校验和,以便函数组能通过校验和即可及时识别出是否发生跃内存块越界。
其中,校验和可以只校验内存块有效数据部分。如果是通过所述模块的函数组访问内存块,校验和会在写操作完成后自动更新。如果不是通过所述模块的函数组访问内存块,则需要在写操作完成后调用相关函数更新校验和。
因此,静态校验标志的方式对编程基本无影响,对执行效率的影响也很低,可以作为校验功能的标配。动态校验标志的方式,在有不通过所述模块函数组进行内存块访问的需求时,需要额外调用函数更新校验和。并且,需要频繁计算校验和,一定程度上影响了执行效率。因此,校验和方式可以作为校验功能的选配,比如仅在调试时才使用。
综上所述,本实施例生成对内存块进行完整描述及有效校验的数据结构,以及对内存块进行管理和访问的函数组,用户通过模块提供的数据结构和函数组对内存块进行访问。既提供安全访问内存块的方法,还提供实用的内存操作手段。同时,匹配完备的越界监测机制,及时发现越界行为。本实施例的内存块管理方法既支持只读内存,也支持可读写内存;既能监测跨内存块越界,也能监测跃内存块的越界。
实施例二
请参照图5至图7,本实施例与实施例一的不同之处在于,进一步限定了内存块描述对象的结构体还包括存储项大小和有效存储项个数:
具体的,基于所述内存块的存储项大小和有效存储项个数进行内存的动态访问和内存块的动态分配。
在本实施例中,引入内存块存储项信息,一方面是为了避免内存块统一管理后,丧失原指针方式访问的便利性,内存块一般会用于存储一组相同类型的数据,有了存储项大小的信息,就可以方便的索引到需要的位置。另一方面,内存块统一管理后还具备指针方式没有的灵活性,而有了有效数据项的个数信息,就可以更方便的追加或删除数据项。
在本实施例中,在内存块描述对象中添加存储项大小,是由于指针不仅仅指示内存地址,还指示了存储项的数据类型。将内存块用一个统一的结构体类型来描述,则原来用指针表达的数据类型信息就无法记录。但不管是哪种数据类型,在进行内存操作时,真正有用的是所述数据类型占用的空间大小。
在本实施例中,在内存块描述对象中添加有效存储项个数,是方便进行数据项的追加和截断等。以字符串为例,可以用strcat函数追加内容,通过strlen函数获取字符串长度,而普通数组则不行。通过这个参数,所述模块管理下的普通数组也能随时追加新项,获取长度等。纳入其管理的字符串还能省去strlen调用,提高字符串的操作效率。
此外,通过存储项信息可以实现按需分配内存空间的功能。在有的场景中,在申请内存阶段并不知道实际会用到多大的空间,从而发生申请空间不足或余量太大造成浪费等情况。通过这个参数,函数组就可以根据需要在空间不足时直接报错或自动扩展内存空间。
在本实施例中,如果内存块是在动态内存的堆空间,函数组在识别到空间不足时,还可以根据需要自动扩大内存块大小。这样,既解决了访问内存块的安全问题,还能简化编程逻辑。如果内存块的存储内容为字符串类型,由于其以’\0’结尾的特点,可以针对性提供一套额外的函数接口,方便使用。
请参照图6,经过封装之后,内存块除了可以读写指定区间,还能以数组的方式访问指定的存储项。因此,经过封装在保证访问安全性的同时并没有降低访问的便利性。同时,通过封装还可以拥有更多便利且安全的内存块访问方式。例如图7中存储项的追加和弹出,可以通过内存块的扩展操作函数:
int MemAppend(mem_t*pMem,void*pItem,int count);
int MemPop(mem_t*pMem,int count);
通过MemAppend向内存块追加数据项,当内存块空间不足时可以自动重新分配更大的内存,也可以直接报错;通过MemPop删除尾部的数据项。用户可以根据需要自由扩展出自己想要的读写等访问接口。
因此,在内存块描述对象中添加存储项信息,以方便提供更为灵活便利的内存访问方法。
实施例三
请参照图2,一种C语言内存块的管理终端1,包括存储器2、处理器3以及存储在所述存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现实施例一和二的一种C语言内存块的管理方法的各个步骤。
综上所述,本发明提供的一种C语言内存块的管理方法及终端,对内存块建立管理对象,包括内存块描述对象和内存块校验标志,通过对内存块完整描述为一个对象,增加校验功能,以便于对其进行管理。通过基于内存块管理对象的函数组来进行内存块操作,通过函数基于内存块对应的内存块描述对象,保证内存操作的安全性,通过函数自动进行内存的校验,监测内存越界;并且与直接指针访问内存块相比,通过在函数组操作阶段进行内存越界等检测,省去独立模块对内存越界进行定时检测,同时提供了各种常见的内存操作方法,从而开发人员能够更专注于具体功能逻辑的实现,提高开发效率。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (10)
1.一种C语言内存块的管理方法,其特征在于,包括步骤:
对内存块建立内存块管理对象,所述内存块管理对象包括内存块描述对象和内存块校验标志,所述内存块描述对象为描述所述内存块的结构体;
建立基于所述内存块管理对象的函数组,通过所述函数组基于所述内存块描述对象进行所述内存块的安全访问,并且基于所述内存块校验标志进行所述内存块的越界检测。
2.根据权利要求1所述的一种C语言内存块的管理方法,其特征在于,所述对内存块建立内存块管理对象包括:
根据内存块管理对象创建函数为内存块创建对应的内存块管理对象,若内存块为只读类型,则建立仅包含内存块描述对象的内存管理对象;
若内存块为可读写类型,则判断所述内存块是否需要校验,若是,则建立包含内存块描述对象和内存块校验标志的内存块管理对象,否则,建立仅包含内存块描述对象的内存管理对象。
3.根据权利要求1所述的一种C语言内存块的管理方法,其特征在于,所述内存块校验标志包括静态校验标志或者动态校验标志:
根据校验需求判断是否生成静态校验标志,若是,则选择固定值或者使用算法生成特征值作为静态校验标志;
根据校验需求判断是否生成动态校验标志,若是,则根据所述内存块的存储内容生成校验值。
4.根据权利要求3所述的一种C语言内存块的管理方法,其特征在于,所述基于所述内存块校验标志进行所述内存块的越界检测包括:
若所述内存块校验标志包括静态校验标志,则判断所述静态校验标志是否发生变化,若是,则所述内存块存在跨内存块越界;
若所述内存块校验标志包括动态校验标志,则根据所述内存块的当前存储内容生成测试校验和,判断所述动态校验标志中的校验值与所述测试校验和是否一致,若否,则所述待操作内存块存在跃内存块越界。
5.根据权利要求1所述的一种C语言内存块的管理方法,其特征在于,通过所述函数组基于所述内存块描述对象进行所述内存块的安全访问包括:
所述内存块描述对象包括内存块的起始地址、大小,类型,还包括内存块的存储项个数和存储项大小;
将所述内存块描述对象传入所述函数组中的功能函数,通过所述功能函数得到所述内存块的有效边界,并基于所述有效边界进行所述内存块的安全访问;
当所述内存块传递给需要通过指针访问内存的模块时,在内存块的存储内容被修改后更新内存块描述对象。
6.一种C语言内存块的管理终端,包括存储器、处理器以及存储在所述存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现以下步骤:
对内存块建立内存块管理对象,所述内存块管理对象包括内存块描述对象和内存块校验标志,所述内存块描述对象为描述所述内存块的结构体;
建立基于所述内存块管理对象的函数组,通过所述函数组基于所述内存块描述对象进行所述内存块的安全访问,并且基于所述内存块校验标志进行所述内存块的越界检测。
7.根据权利要求6所述的一种C语言内存块的管理终端,其特征在于,所述对内存块建立内存块管理对象包括:
根据内存块管理对象创建函数为内存块创建对应的内存块管理对象,若内存块为只读类型,则建立仅包含内存块描述对象的内存管理对象;
若内存块为可读写类型,则判断所述内存块是否需要校验,若是,则建立包含内存块描述对象和内存块校验标志的内存块管理对象,否则,建立仅包含内存块描述对象的内存管理对象。
8.根据权利要求6所述的一种C语言内存块的管理终端,其特征在于,所述内存块校验标志包括静态校验标志或者动态校验标志:
根据校验需求判断是否生成静态校验标志,若是,则选择固定值或者使用算法生成特征值作为静态校验标志;
根据校验需求判断是否生成动态校验标志,若是,则根据所述内存块的存储内容生成校验值。
9.根据权利要求8所述的一种C语言内存块的管理终端,其特征在于,所述基于所述内存块校验标志进行所述内存块的越界检测包括:
若所述内存块校验标志包括静态校验标志,则判断所述静态校验标志是否发生变化,若是,则所述内存块存在跨内存块越界;
若所述内存块校验标志包括动态校验标志,则根据所述内存块的当前存储内容生成测试校验和,判断所述动态校验标志中的校验值与所述测试校验和是否一致,若否,则所述待操作内存块存在跃内存块越界。
10.根据权利要求8所述的一种C语言内存块的管理终端,其特征在于,通过所述函数组基于所述内存块描述对象进行所述内存块的安全访问包括:
所述内存块描述对象包括内存块的起始地址、大小,类型,还包括内存块的存储项个数和存储项大小;
将所述内存块描述对象传入所述函数组中的功能函数,通过所述功能函数得到所述内存块的有效边界,并基于所述有效边界进行所述内存块的安全访问;
当所述内存块传递给需要通过指针访问内存的模块时,在内存块的存储内容被修改后更新内存块描述对象。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210440122.7A CN114942896A (zh) | 2022-04-25 | 2022-04-25 | 一种c语言内存块的管理方法及终端 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210440122.7A CN114942896A (zh) | 2022-04-25 | 2022-04-25 | 一种c语言内存块的管理方法及终端 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114942896A true CN114942896A (zh) | 2022-08-26 |
Family
ID=82907223
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210440122.7A Pending CN114942896A (zh) | 2022-04-25 | 2022-04-25 | 一种c语言内存块的管理方法及终端 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114942896A (zh) |
-
2022
- 2022-04-25 CN CN202210440122.7A patent/CN114942896A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6976221B2 (en) | System and method for flexible software linking | |
US20080104361A1 (en) | Storage Device, Memory Managing Apparatus, Memory Managing Method, and Program | |
KR100316981B1 (ko) | 플래시 메모리를 구비한 마이크로컴퓨터 및 플래시 메모리에 프로그램을 저장하는 방법 | |
US7181198B2 (en) | Program rewriting system and method for a portable telephone set | |
CN105637521A (zh) | 一种数据处理方法及智能终端 | |
CN112596668A (zh) | 一种存储器的坏块处理方法及系统 | |
CN113094107B (zh) | 数据保护方法、装置、设备及计算机存储介质 | |
CN113076122A (zh) | 一种资源文件管理方法、装置、设备及存储介质 | |
JP5541194B2 (ja) | フラッシュメモリに対してデータの読み出しおよび書き込みを行う制御装置 | |
US6915512B1 (en) | Software editing with indication of format and processing state of each process of the software | |
EP3721346B1 (en) | Bit-accurate-tracing analysis with applied memory region lifetimes | |
CN114942896A (zh) | 一种c语言内存块的管理方法及终端 | |
CN110765008A (zh) | 一种数据处理方法及装置 | |
CN113836600B (zh) | 一种Embedded Flash误写保护方法 | |
CN112052112A (zh) | 基于NOR Flash存储的位翻转错误检测方法、装置及存储介质 | |
CN110515751B (zh) | 一种加载运行VxWorks实时保护进程的方法及系统 | |
CN112463042A (zh) | 一种数据卷导入数据校验方法、装置、终端及存储介质 | |
CN110825714A (zh) | 文件存储控制方法及其装置、文件存储装置、电子装置 | |
GB2540179A (en) | An integrated system for the transactional management of main memory and data storage | |
CN111290765A (zh) | 一种固件快速烧录方法、系统及存储介质 | |
CN115640269B (zh) | 一种基于按需复制的安卓应用安装加速方法 | |
CN113157513B (zh) | 一种堆内存破坏检测方法、装置、电子设备及存储介质 | |
KR20200124243A (ko) | 처리회로 상에서 실행할 프로그램을 디버깅할 때 메타데이터를 액세스하는 방법 | |
CN114138588B (zh) | 一种控制器的调试信息导出方法、系统、设备以及介质 | |
CN113703671B (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 |