CN1673979A - 一种内存分配方法 - Google Patents
一种内存分配方法 Download PDFInfo
- Publication number
- CN1673979A CN1673979A CNA2004100303994A CN200410030399A CN1673979A CN 1673979 A CN1673979 A CN 1673979A CN A2004100303994 A CNA2004100303994 A CN A2004100303994A CN 200410030399 A CN200410030399 A CN 200410030399A CN 1673979 A CN1673979 A CN 1673979A
- Authority
- CN
- China
- Prior art keywords
- memory
- page
- address
- virtual memory
- virtual
- 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
Landscapes
- Storage Device Security (AREA)
Abstract
一种内存分配方法,该方法为:按实际申请的内存页与预定数量的内存页之和分配虚拟内存地址;将分配的物理内存映射到所述虚拟内存地址上,并且将相当于所述预定数量的内存页需要的虚拟内存地址设置为能够触发访问异常的非法访问区。本发明通过在为申请内存时多分配内存页,并将相应的内存页对应的虚拟内存地址设置为非法访问区,使得有内存读写越界产生时能被及时发现,且方便的定位出错位置。
Description
技术领域
本发明涉及计算机内存技术,特别涉及一种内存分配方法。
背景技术
计算机软件的应用得到了越来越广的应用,一方面使用软件的人数逐渐增多,另一方面使用软件的人中有丰富经验的计算机工程师逐渐减少,这就要求软件对用户提供的界面简单易用,但功能强大。这种要求的直接影响就是软件规模变大,复杂度增加,零错误的软件几乎是不可能的事情。
在编程中,由于边界值控制错误,常常导致内存读写越界;或者由于模块配合错误,导致某块申请来的内存在释放后还被其它模块继续使用。这些都会导致一些非常隐蔽的错误,及其难找。给编程带来很大的困难。
为了避免内存读写越界或者误用被释放的内存,一般都要求要对代码进行再检查(review),以发现程序错误,但靠人工检查投入很大,且对发现这种错误的帮助很有限,效果不理想。最好就是提供技术手段供调试运行时及时准确的发现错误。
现在常用来解决上述问题的方法有:
防止内存写越界:申请内存时,在需要的长度上多申请一些内存。在申请到的内存中利用后面多申请到的内存做一些特殊标记(debug_flag)。如果发生内存写越界错误,特殊标记就会被修改。程序运行时,在适当时候由程序自己去检查这些特殊标记是否有被改变。当发现标记被改变,就认为是有写越界的错误产生,程序发出报警,由编程人员检查对这段内存进行操作的代码是否有错误,参阅图1。这种方法虽然能检查到内存写越界,但存下以下缺点:
(1)程序运行时要经常主动去检查那些特殊标记是否被破坏,对性能造成影响,尤其是内存操作频繁时。
(2)这种方法不能发现内存读越界错误。
(3)当发现标记被改变时,只能知道有错误产生了。但不能知道错误是哪段程序在什么时候产生的,需要人工去检查代码,效率低。
防止使用释放后的内存:使用和标准不同的接口,在释放后把内存指针置空,防止该指针被误用。但用这种方法使用的接口和ANSI C标准规定的语义不一样,从而使代码可移植性不好。
发明内容
本发明的目的在于提供一种内存分配方法,以解决现有的内存分配机制对发现访问内存错误效率低和效果不佳的问题。
一种内存分配方法,该方法为:按实际申请的内存页与预定数量的内存页之和分配虚拟内存地址;将分配的物理内存映射到所述虚拟内存地址上,并且将相当于所述预定数量的内存页需要的虚拟内存地址设置为能够触发访问异常的非法访问区。
其中:
按实际申请的内存页分配物理内存,并将相当于所述预定数量的内存页需要的虚拟内存地址映射为无效页而使其成为非法访问区;或者按实际申请的内存页与预定数量的内存页之和分配物理内存,并将相当于所述预定数量的内存页需要的虚拟内存地址设置为特权级才能访问的特性来使其成为非法访问区。
在释放内存时,将释放的虚拟内存地址设置为特权级才能访问的特性;或者在释放内存时,删除释放的虚拟内存地址与物理内存之间的映射关系,使该释放的虚拟内存地址成为无效地址。
设置为非法访问区的虚拟内存地址处于分配的虚拟内存地址中的最后部分,即高地址部分。
所述预定数量的内存页为一页或多页内存。
初化时对可分配的物理内存统一管理,并使未被使用的物理内存与虚拟内存地址之间无映射关系。
本发明通过在为申请内存时多分配内存页,并将相应的内存页对应的虚拟内存地址设置为非法访问区,使得有内存读写越界产生时能被及时发现,且方便的定位出出错位置;内存释放时断开虚拟内存地址和物理内存的映射关系,在不改变标准规定的内存释放接口语义情况下,有效防止已释放内存被误用。
附图说明
图1为现有技术申请的内存示意图;
图2为本发明申请内存时建立的虚拟内存地址与物理内存的映射关系示意图;
图3为本发明的释放内存后断开内存虚拟址与物理内存之间的映射关系示意图。
具体实施方式
内存地址包括物理地址和虚拟地址。对程序来说,可见的只有虚拟地址,物理地址是透明的,程序操作的所有内存地址都是虚拟地址。当程序对某个内存地址进行操作时,微处理器(CPU)的内存管理单元(Memory Management Unit,MMU)会自动根据系统预先定好的映射表找到该虚拟地址所对应的物理地址,并把对虚拟地址的操作实际应用到物理内存地址。内存管理单元对虚拟地址和物理地址的映射是以页为长度单位的。
在本发明中,初始时对可分配的物理内存进行统一管理,在物理内存未被使用前,不与虚拟内存地址之间保持映射关系(即没有任何一个虚拟地址是指向这些未被使用的物理内存)。
内存分配包括内存申请和内存释放。参阅图2所示,申请内存时,内存管理单元按下述步骤进行处理:
步骤10:内存管理单元计算出实际需要申请的内存长度需要几页内存,在实际需要的页数量上再多加上一页作为待申请的内存页数量;
步骤20:根据待申请的内存页数量,由地址分配算法分配相应长度的虚拟地址。
步骤30:根据实际需要的内存页数量分配相应的物理内存;
步骤40:将最后一页虚拟内存地址(即高地址部分)映射为无效页使其成为非法访问区,把其余申请到的虚拟内存地址映射到分配的物理内存上,参阅图3所示。
因为申请的虚拟内存地址比取得的物理内存地址多了一页,所以在映射时,将最后一页的虚拟内存地址映射为无效页来使其成为非法访问区,即没有物理内存映射到该页虚拟内存地址,这样对申请到的最后一页虚拟内存地址进行访问时会立即产生异常。
当对申请到的内存进行读写有越界错误产生时,即对内存的最后一个无效页进行读或写时,硬件立即触发一个访问异常,在异常处理里记录下程序运行环境,即可准确得到错误产生来源和时间。
在步骤30中,也可按待申请的内存页数量分配物理内存;在步骤40中,把申请到的虚拟内存地址映射到分配的物理内存上,并且将最后一页虚拟内存地址设置为特权级才能访问的特性,则任何用户状态下的程序对该页内存进行读或写时,硬件也会立即触发一个访问异常。
参阅图4所示,在释放内存的时候,内存管理单元除了在分配释放算法中释放虚拟内存地址外,同时将这些虚拟内存地址与物理内存的映射断开,使这些虚拟内存地址成为无效地址。内存释放后,虽然内存指针还保留原值,但该指针所指向的虚拟内存地址已经变为一个不合法地址,对这些虚拟内存地址进行任何读或写操作都会立即引起异常,这样就可以马上发现哪里的程序错误的使用了被释放的虚拟内存地址。
释放内存时,也可以将释放的虚拟内存地址设置为特权级才能访问的特性,任何用户态下的程序对该虚拟内存地址进行读或写操作均会立即触发异常。
本实施例中,虽以内存管理单元在实际需要的内存页数量上多加上一页内存来分配虚拟内存地址为例进行说明,但也可加上两页或更多页来分配虚拟内存地址,其原理相同。
Claims (8)
1、一种内存分配方法,其特征在于该方法为:
按实际申请的内存页与预定数量的内存页之和分配虚拟内存地址;
将分配的物理内存映射到所述虚拟内存地址上;以及
将相当于所述预定数量的内存页需要的虚拟内存地址设置为能够触发访问异常的非法访问区。
2、如权利要求1所述的内存分配置方法,其特征在于,按实际申请的内存页分配物理内存,并将相当于所述预定数量的内存页需要的虚拟内存地址映射为无效页而使其成为非法访问区。
3、如权利要求1所述的内存分配方法,其特征在于,按实际申请的内存页与预定数量的内存页之和分配物理内存,并将相当于所述预定数量的内存页需要的虚拟内存地址设置为特权级才能访问的特性来使其成为非法访问区。
4、如权利要求1、2或3所述的方法,其特征在于,在释放内存时,将释放的虚拟内存地址设置为特权级才能访问的特性。
5、如权利要求1、2或3所述的方法,其特征在于,在释放内存时,删除释放的虚拟内存地址与物理内存之间的映射关系,使该释放的虚拟内存地址成为无效地址。
6、如权利要求1所述的方法,其特征在于,设置为非法访问区的虚拟内存地址处于分配的虚拟内存地址中的最后部分,即高地址部分。
7、如权利要求1所述的方法,其特征在于,所述预定数量的内存页为一页或多页内存。
8、如权利要求1所述的方法,其特征在于,初化时对可分配的物理内存统一管理,并使未被使用的物理内存与虚拟内存地址之间无映射关系。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2004100303994A CN100343828C (zh) | 2004-03-24 | 2004-03-24 | 一种内存分配方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2004100303994A CN100343828C (zh) | 2004-03-24 | 2004-03-24 | 一种内存分配方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1673979A true CN1673979A (zh) | 2005-09-28 |
CN100343828C CN100343828C (zh) | 2007-10-17 |
Family
ID=35046537
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2004100303994A Expired - Fee Related CN100343828C (zh) | 2004-03-24 | 2004-03-24 | 一种内存分配方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100343828C (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101763231B (zh) * | 2010-01-07 | 2011-07-20 | 浙江大学 | 一种打印设备数据的快速传输方法 |
CN102306126A (zh) * | 2011-08-24 | 2012-01-04 | 华为技术有限公司 | 内存管理方法、装置和系统 |
CN103164348A (zh) * | 2013-02-28 | 2013-06-19 | 浙江大学 | 一种多系统下对实时操作系统所占用内存的保护方法 |
CN103164290A (zh) * | 2011-12-14 | 2013-06-19 | 腾讯科技(深圳)有限公司 | 应用内存管理方法和装置 |
CN104657275A (zh) * | 2015-03-09 | 2015-05-27 | 浪潮软件集团有限公司 | 一种内存越界的定位方法及装置 |
CN104899157A (zh) * | 2015-05-28 | 2015-09-09 | 北京北信源软件股份有限公司 | 一种内存溢出检测方法和系统 |
CN106326094A (zh) * | 2015-06-29 | 2017-01-11 | 联芯科技有限公司 | 检查指针异常的方法及系统 |
CN107729751A (zh) * | 2016-08-12 | 2018-02-23 | 阿里巴巴集团控股有限公司 | 数据检测方法及装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7000087B2 (en) * | 2001-11-07 | 2006-02-14 | International Business Machines Corporation | Programmatically pre-selecting specific physical memory blocks to allocate to an executing application |
CN1307558C (zh) * | 2001-12-29 | 2007-03-28 | 中兴通讯股份有限公司 | 通信系统中分系统间的虚拟内存分配管理方法 |
CN1269047C (zh) * | 2003-07-31 | 2006-08-09 | 中兴通讯股份有限公司 | 一种具有内存保护功能的内存管理方法 |
-
2004
- 2004-03-24 CN CNB2004100303994A patent/CN100343828C/zh not_active Expired - Fee Related
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101763231B (zh) * | 2010-01-07 | 2011-07-20 | 浙江大学 | 一种打印设备数据的快速传输方法 |
CN102306126A (zh) * | 2011-08-24 | 2012-01-04 | 华为技术有限公司 | 内存管理方法、装置和系统 |
CN102306126B (zh) * | 2011-08-24 | 2014-06-04 | 华为技术有限公司 | 内存管理方法、装置和系统 |
CN103164290A (zh) * | 2011-12-14 | 2013-06-19 | 腾讯科技(深圳)有限公司 | 应用内存管理方法和装置 |
CN103164290B (zh) * | 2011-12-14 | 2017-08-04 | 腾讯科技(深圳)有限公司 | 应用内存管理方法和装置 |
CN103164348A (zh) * | 2013-02-28 | 2013-06-19 | 浙江大学 | 一种多系统下对实时操作系统所占用内存的保护方法 |
CN104657275A (zh) * | 2015-03-09 | 2015-05-27 | 浪潮软件集团有限公司 | 一种内存越界的定位方法及装置 |
CN104899157A (zh) * | 2015-05-28 | 2015-09-09 | 北京北信源软件股份有限公司 | 一种内存溢出检测方法和系统 |
CN106326094A (zh) * | 2015-06-29 | 2017-01-11 | 联芯科技有限公司 | 检查指针异常的方法及系统 |
CN106326094B (zh) * | 2015-06-29 | 2019-10-18 | 联芯科技有限公司 | 检查指针异常的方法及系统 |
CN107729751A (zh) * | 2016-08-12 | 2018-02-23 | 阿里巴巴集团控股有限公司 | 数据检测方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN100343828C (zh) | 2007-10-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9785370B2 (en) | Method and system for automatically preserving persistent storage | |
US8074047B2 (en) | System and method for content replication detection and elimination in main memory | |
US9213623B2 (en) | Memory allocation with identification of requesting loadable kernel module | |
US7380096B1 (en) | System and method for identifying TLB entries associated with a physical address of a specified range | |
US6751680B2 (en) | Protected control of devices by user applications in multiprogramming environments | |
CA1266532A (en) | Method to share copy on write segment for mapped files | |
US5852738A (en) | Method and apparatus for dynamically controlling address space allocation | |
US8190914B2 (en) | Method and system for designating and handling confidential memory allocations | |
US20040117594A1 (en) | Memory management method | |
US7734842B2 (en) | Computer-implemented method, apparatus, and computer program product for managing DMA write page faults using a pool of substitute pages | |
JPH10187529A (ja) | 動的romデータの書込み時ロードを可能にするためのシステムおよび方法 | |
US6738882B1 (en) | Concurrent multi-processor memory testing beyond 32-bit addresses | |
US8327111B2 (en) | Method, system and computer program product for batched virtual memory remapping for efficient garbage collection of large object areas | |
CN100343828C (zh) | 一种内存分配方法 | |
US10120812B2 (en) | Manipulation of virtual memory page table entries to form virtually-contiguous memory corresponding to non-contiguous real memory allocations | |
US20170115889A1 (en) | Systems and methods for set membership matching | |
US7293207B2 (en) | Method for testing memory in a computer system utilizing a CPU with either 32-bit or 36-bit memory addressing | |
CN101055543A (zh) | 用于访问另一个进程的进程本地存储装置的方法和设备 | |
CN114780446A (zh) | 基于mpu的内存访问方法、装置、电子设备及存储介质 | |
CN1746863A (zh) | 一种基于绝对座标体系的操作系统客体重用测试方法 | |
US20090024798A1 (en) | Storing Data | |
WO2004100430A2 (en) | Distributed memory computing within a single computer | |
CN111190550B (zh) | 一种元数据加速方法、装置及存储设备 | |
US11288207B2 (en) | Apparatus and method for processing address translation and invalidation transactions | |
WO2024132113A1 (en) | Persistent memory devices and methods |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20071017 Termination date: 20180324 |