CN106371920A - 一种避免内存地址冲突的方法及装置 - Google Patents
一种避免内存地址冲突的方法及装置 Download PDFInfo
- Publication number
- CN106371920A CN106371920A CN201610721416.1A CN201610721416A CN106371920A CN 106371920 A CN106371920 A CN 106371920A CN 201610721416 A CN201610721416 A CN 201610721416A CN 106371920 A CN106371920 A CN 106371920A
- Authority
- CN
- China
- Prior art keywords
- address
- variable
- mastery routine
- memory headroom
- memory
- 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
- 238000000034 method Methods 0.000 title claims abstract description 32
- 230000006870 function Effects 0.000 claims description 74
- 230000008859 change Effects 0.000 claims description 50
- 230000001419 dependent effect Effects 0.000 claims description 19
- 239000000654 additive Substances 0.000 claims description 8
- 230000000996 additive effect Effects 0.000 claims description 8
- 238000012790 confirmation Methods 0.000 claims description 7
- 238000004458 analytical method Methods 0.000 claims description 4
- 230000006399 behavior Effects 0.000 claims description 2
- 230000004048 modification Effects 0.000 abstract description 8
- 238000012986 modification Methods 0.000 abstract description 8
- 230000008571 general function Effects 0.000 abstract 2
- 238000010586 diagram Methods 0.000 description 13
- 230000008569 process Effects 0.000 description 9
- 238000004590 computer program Methods 0.000 description 7
- 238000012545 processing Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 1
- 235000013399 edible fruits Nutrition 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000004080 punching Methods 0.000 description 1
- 230000000630 rising effect Effects 0.000 description 1
- 238000003860 storage Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/355—Indexed addressing
Abstract
本发明公开了一种避免内存地址冲突的方法及装置。所述避免内存地址冲突的方法,包括:当主程序调用普通函数时,判断所述普通函数对所述主程序中变量的地址的变更操作;判断所述变更操作之后的所述变量的地址是否与主程序中的其他变量的地址冲突;当所述变更操作之后的所述变量的地址与主程序中的其他变量的地址冲突时,系统指定出新的空闲的内存空间;将所述变量的地址修改为所述新的空闲的内存空间中的地址。本发明可避免对变量的内存地址的进行非法操作和非法赋值,从而避免非空闲内存地址中的数据被误改的情况发生。
Description
技术领域
本发明涉及内存管理技术领域,特别涉及一种避免内存地址冲突的方法及装置。
背景技术
众所周知,操作系统对数据的操作是事需要通过内存地址找到相应位置的内存中的数据,再对该内存中的数据进行操作的。指针变量往往被应用于指向某一变量的地址。如果对指针变量中内存数值a进行修改,其结果很可能也会指向一个真实存在的内存地址b,若该真实存在的内存地址b为非空闲内存空间的内存地址,则对该内存地址b中所保存的数据k进行修改,不放假设该内存地址b中所保存的数据被修改为k。当操作系统调用内存地址b中的数值的时候,很可能发生无法预测的后果。如何妥善的解决上述问题,就成了业界亟待解决的课题。
发明内容
本发明提供一种避免内存地址冲突的方法及装置,用以避免对变量的内存地址的进行非法操作和非法赋值,从而避免非空闲内存地址中的数据被误改的情况发生。
根据本发明实施例的第一方面,提供一种避免内存地址冲突的方法,包括:
当主程序调用普通函数时,判断所述普通函数对所述主程序中变量的地址的变更操作;
判断所述变更操作之后的所述变量的地址是否与主程序中的其他变量的地址冲突;
当所述变更操作之后的所述变量的地址与主程序中的其他变量的地址冲突时,系统指定出新的空闲的内存空间;
将所述变量的地址修改为所述新的空闲的内存空间中的地址。
在一个实施例中,所述当主程序调用普通函数时,判断所述普通函数对所述主程序中变量的地址的变更操作,包括:
当所述主程序调用普通函数时,判断所述普通函数是否对所述主程序中的变量的进行了参数引用;
当所述普通函数对所述主程序中的变量的存在参数引用时,判断所述普通函数是否对所述主程序中的所述变量的地址进行了调用;
当所述普通函数对所述主程序中的所述变量的地址进行了调用时,判断所述普通函数是否对所述主程序中的所述变量的地址进行了变更操作。
在一个实施例中,所述判断所述变更操作之后的所述变量的地址是否与主程序中的其他变量的地址冲突,包括:
获取主程序中所有变量所占据的内存空间;
分析出所述主程序中所有变量所占据的内存空间的地址区间;
判断所述变更操作之后的所述变量的地址是否在所述地址区间之内。
在一个实施例中,所述当所述变更操作之后的所述变量的地址与主程序中的其他变量的地址冲突时,系统指定出新的空闲的内存空间,包括:
当所述变更操作之后的所述变量的地址与主程序中的其他变量的地址冲突时,获取所述变量占据的内存空间的数值;
系统遍历当下内存空间中处于空闲状态的所有的连续内存空间;
选择内存空间的数值大于所述变量占据的内存空间的数值的所述连续内存空间;
确定所述连续内存空间为所述系统指定出新的空闲的内存空间。
在一个实施例中,所述将所述变量的地址修改为所述新的空闲的内存空间中的地址,包括:
获取所述新的空闲的内存空间中的地址区间的起始地址和终止地址;
将所述终止地址的数值减去所述变量占据的内存空间的数值,将上述减法运算的结果加上自然数1,确认所述加法运算的结果为极限地址;
确认所述起始地址与所述极限地址之间的地址区间为合理区间;
当所述变量的地址在所述合理区间之内时,确认所述变量的地址为所述新的空闲的内存空间中的地址。
根据本发明实施例的第二方面,提供一种避免内存地址冲突的装置,包括:
第一判断模块,用于当主程序调用普通函数时,判断所述普通函数对所述主程序中变量的地址的变更操作;
第二判断模块,用于判断所述变更操作之后的所述变量的地址是否与主程序中的其他变量的地址冲突;
指定模块,用于当所述变更操作之后的所述变量的地址与主程序中的其他变量的地址冲突时,系统指定出新的空闲的内存空间;
修改模块,用于将所述变量的地址修改为所述新的空闲的内存空间中的地址。
在一个实施例中,所述第一判断模块,包括:
第一判断子模块,用于当所述主程序调用普通函数时,判断所述普通函数是否对所述主程序中的变量的进行了参数引用;
第二判断子模块,用于当所述普通函数对所述主程序中的变量的存在参数引用时,判断所述普通函数是否对所述主程序中的所述变量的地址进行了调用;
第三判断子模块,用于当所述普通函数对所述主程序中的所述变量的地址进行了调用时,判断所述普通函数是否对所述主程序中的所述变量的地址进行了变更操作。
在一个实施例中,所述第二判断模块,包括:
第一获取子模块,用于获取主程序中所有变量所占据的内存空间;
分析子模块,用于分析出所述主程序中所有变量所占据的内存空间的地址区间;
第四判断子模块,用于判断所述变更操作之后的所述变量的地址是否在所述地址区间之内。
在一个实施例中,所述指定模块,包括
第二获取子模块,用于当所述变更操作之后的所述变量的地址与主程序中的其他变量的地址冲突时,获取所述变量占据的内存空间的数值;
遍历子模块,用于系统遍历当下内存空间中处于空闲状态的所有的连续内存空间;
选择子模块,用于选择内存空间的数值大于所述变量占据的内存空间的数值的所述连续内存空间;
第一确定子模块,用于确定所述连续内存空间为所述系统指定出新的空闲的内存空间。
在一个实施例中,所述修改模块,包括:
第三获取子模块,用于获取所述新的空闲的内存空间中的地址区间的起始地址和终止地址;
计算子模块,用于将所述终止地址的数值减去所述变量占据的内存空间的数值,将上述减法运算的结果加上自然数1,确认所述加法运算的结果为极限地址;
第二确认子模块,用于确认所述起始地址与所述极限地址之间的地址区间为合理区间;
第三确认子模块,用于当所述变量的地址在所述合理区间之内时,确认所述变量的地址为所述新的空闲的内存空间中的地址。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
附图说明
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:
图1为本发明一示例性实施例示出的一种避免内存地址冲突的方法的流程图;
图2为本发明一示例性实施例示出的一种避免内存地址冲突的方法的步骤S11的流程图;
图3为本发明一示例性实施例示出的一种避免内存地址冲突的方法的步骤S12的流程图;
图4为本发明一示例性实施例示出的一种避免内存地址冲突的方法的步骤S13的流程图;
图5为本发明一示例性实施例示出的一种避免内存地址冲突的方法的步骤S14的流程图;
图6为本发明一示例性实施例示出的一种避免内存地址冲突的装置的框图;
图7为本发明一示例性实施例示出的一种避免内存地址冲突的装置的第一判断模块61的框图;
图8为本发明一示例性实施例示出的一种避免内存地址冲突的装置的第二判断模块62的框图;
图9为本发明一示例性实施例示出的一种避免内存地址冲突的装置的指定模块63的框图;
图10为本发明另一示例性实施例示出的一种避免内存地址冲突的装置的修改模块64的框图。
具体实施方式
以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。
图1是根据一示例性实施例示出的一种避免内存地址冲突的方法流程图,如图1所示,该避免内存地址冲突的方法,包括以下步骤S11-S14:
在步骤S11中,当主程序调用普通函数时,判断所述普通函数对所述主程序中变量的地址的变更操作;
在步骤S12中,判断所述变更操作之后的所述变量的地址是否与主程序中的其他变量的地址冲突;
在步骤S13中,当所述变更操作之后的所述变量的地址与主程序中的其他变量的地址冲突时,系统指定出新的空闲的内存空间;
在步骤S14中,将所述变量的地址修改为所述新的空闲的内存空间中的地址。
在一个实施例中,首先,当该主程序调用普通函数时,判断该普通函数是否对该主程序中的变量的进行了参数引用。当该普通函数对该主程序中的变量的存在参数引用时,判断该普通函数是否对该主程序中的该变量的地址进行了调用。当该普通函数对该主程序中的该变量的地址进行了调用时,判断该普通函数是否对该主程序中的该变量的地址进行了变更操作。
然后,获取主程序中所有变量所占据的内存空间,进一步的,分析出该主程序中所有变量所占据的内存空间的地址区间。判断该变更操作之后的该变量的地址是否在该地址区间之内。当该变更操作之后的该变量的地址是否在该地址区间之内时,等价于当该变更操作之后的该变量的地址与主程序中的其他变量的地址冲突时,获取该变量占据的内存空间的数值。系统遍历当下内存空间中处于空闲状态的所有的连续内存空间,选择出内存空间的数值大于该变量占据的内存空间的数值的该连续内存空间,并确定该连续内存空间为该系统指定出新的空闲的内存空间。
获取该新的空闲的内存空间中的地址区间的起始地址和终止地址,将该终止地址的数值减去该变量占据的内存空间的数值,将上述减法运算的结果加上自然数1,并确认该加法运算的结果为极限地址,同时确认该起始地址与该极限地址之间的地址区间为合理区间。当该变量的地址在该合理区间之内时,确认该变量的地址为该新的空闲的内存空间中的地址。
在一个实施例中,如图2所示,步骤S11包括如下步骤S21-S22:
在步骤S21中,当所述主程序调用普通函数时,判断所述普通函数是否对所述主程序中的变量的进行了参数引用;
在步骤S22中,当所述普通函数对所述主程序中的变量的存在参数引用时,判断所述普通函数是否对所述主程序中的所述变量的地址进行了调用;
在步骤S23中,当所述普通函数对所述主程序中的所述变量的地址进行了调用时,判断所述普通函数是否对所述主程序中的所述变量的地址进行了变更操作。
在一个实施例中,一个主程序可以引用多个普通函数,普通函数也可以调用主程序中的任一或多个变量的地址,当普通函数对主程序中变量的地址中的数据进行修改时,等价于修改了主程序中变量的值。所以,当主程序调用普通函数的时候,首先判断普通函数是否对主程序中的变量存在参数引用的情况。若该普通函数对主程序中的变量存在参数引用,判断该普通函数是否对主程序中的变量的地址进行了调用。若该普通函数对主程序中的变量的地址进行了调用,判断该普通函数是否对该主程序中的变量的地址进行了变更操作。
例如,int stack_test(int a,int b)这个普通函数中对主程序的变量进行了应用。“int*p=&a;”,这句代码对主程序中的变量a的地址进行了调用。“p++;”,这句代码对主程序中的变量的地址进行了变更操作。
在一个实施例中,如图3所示,步骤S12包括如下步骤S31-S33:
在步骤S31中,获取主程序中所有变量所占据的内存空间;
在步骤S32中,分析出所述主程序中所有变量所占据的内存空间的地址区间;
在步骤S33中,判断所述变更操作之后的所述变量的地址是否在所述地址区间之内。
在一个实施例中,若需要判断普通程序修改后的主函数的变量的地址的是否合理,需要判断该修改后的主函数的变量的地址是否占用主程序本身所占据的内存空间。故需要首先获取主程序所占据的内存空间,该内存空间包括了主程序中所有变量所占据的内存空间。进一步的,分析出该主程序中所有变量所占据的内存空间的地址区间。然后,判断该变更操作之后的变量的地址是否在该地址之内。
例如,获取主程序中所有变量所占据的内存空间,并分析出该内存空间的地址区间,不妨假设该地址区间为0xbbbb到0xcccc。判断该变更操作之后的内存的地址是否在该地址区间之内。
在一个实施例中,如图4所示,步骤S13包括如下步骤S41-S44:
在步骤S41中,当所述变更操作之后的所述变量的地址与主程序中的其他变量的地址冲突时,获取所述变量占据的内存空间的数值;
在步骤S42中,系统遍历当下内存空间中处于空闲状态的所有的连续内存空间;
在步骤S43中,选择内存空间的数值大于所述变量占据的内存空间的数值的所述连续内存空间;
在步骤S44中,确定所述连续内存空间为所述系统指定出新的空闲的内存空间。
在一个实施例中,该变更操作之后的变量的地址与主程序中的其他变量的地址发生冲突,等价于该变更操作之后的变量的地址属于该主程序中所有变量所占据的内存空间的地址区间。在这种情况下,需要获取该变量本身需要占据的内存空间的大小的数值,然后系统遍历当下内存中处于空闲状态的所有的连续内存空间。选择出一个处于空闲状态的连续内存空间,该连续内存空间的所占据的内存空间大于该变量所占据的内存空间,并确定该内存空间为系统指定出新的空闲的内存空间。
例如,一个变量所占据内存空间为8字节,在系统的处于空闲状态的连续内存空间中找出大于8字节的一个内存空间,然后确定该内存空间为为系统指定出新的空闲的内存空间。
在一个实施例中,如图5所示,步骤S14包括如下步骤S51-S55:
在步骤S51中,获取所述新的空闲的内存空间中的地址区间的起始地址和终止地址;
在步骤S52中,将所述终止地址的数值减去所述变量占据的内存空间的数值,将上述减法运算的结果加上自然数1,确认所述加法运算的结果为极限地址;
在步骤S53中,确认所述起始地址与所述极限地址之间的地址区间为合理区间;
在步骤S54中,当所述变量的地址在所述合理区间之内时,确认所述变量的地址为所述新的空闲的内存空间中的地址。
在一个实施例中,获取上一个实施例中得到的处于空闲状态的连续内存空间的起始地址和终止地址。根据该变量本身所占据的内存空间的数值,在该终止地址的数值上减去该变量本身所占据的内存空间的数值,在上述减法运算的结果上加上自然数1,所得到的结果就是该变量在该内存空间中的极限内存地址,并确认该加法运算的结果为极限地址。然后,确认该起始地址与该极限地址之间的地址区间为合理区间,该变量的地址为该合理区间内的任意地址,并确认该变量的地址为该行的空闲的内存空间中的地址。
例如,不妨假设该新的空闲的内存空间的地址区间的起始地址为a终止地址为b,该地址区间为(a,b)。该变量所占据的内存空间为d,计算c=b-d+1。则合理区间为(a,c)。当该变量的地址在合理区间(a,c)之内取值的时候,确认该变量的地址为该新的空闲的内存空间中的地址。
在一个实施例中,图6是根据一示例性实施例示出的一种避免内存地址冲突的装置框图。如图6示,该装置包括第一判断模块61、第二判断模块62、指定模块63和修改模块64。
该第一判断模块61,用于当主程序调用普通函数时,判断所述普通函数对所述主程序中变量的地址的变更操作;
该第二判断模块62,用于判断所述变更操作之后的所述变量的地址是否与主程序中的其他变量的地址冲突;
该指定模块63,用于当所述变更操作之后的所述变量的地址与主程序中的其他变量的地址冲突时,系统指定出新的空闲的内存空间;
该修改模块64,用于将所述变量的地址修改为所述新的空闲的内存空间中的地址。
如图7所示,该第一判断模块61包括第一判断子模块71、第二判断子模块72和第三判断子模块73。
该第一判断子模块71,用于当所述主程序调用普通函数时,判断所述普通函数是否对所述主程序中的变量的进行了参数引用;
该第二判断子模块72,用于当所述普通函数对所述主程序中的变量的存在参数引用时,判断所述普通函数是否对所述主程序中的所述变量的地址进行了调用;
该第三判断子模块73,用于当所述普通函数对所述主程序中的所述变量的地址进行了调用时,判断所述普通函数是否对所述主程序中的所述变量的地址进行了变更操作。
如图8所示,该第二判断模块62包括第一获取子模块81、分析子模块82和第四判断子模块83。
该第一获取子模块81,用于获取主程序中所有变量所占据的内存空间;
该分析子模块82,用于分析出所述主程序中所有变量所占据的内存空间的地址区间;
该第四判断子模块83,用于判断所述变更操作之后的所述变量的地址是否在所述地址区间之内。
如图9所示,该指定模块63包括第二获取子模块91、遍历子模块92、选择子模块93和第一确定子模块94。
第二获取子模块91,用于当所述变更操作之后的所述变量的地址与主程序中的其他变量的地址冲突时,获取所述变量占据的内存空间的数值;
遍历子模块92,用于系统遍历当下内存空间中处于空闲状态的所有的连续内存空间;
选择子模块93,用于选择内存空间的数值大于所述变量占据的内存空间的数值的所述连续内存空间;
第一确定子模块94,用于确定所述连续内存空间为所述系统指定出新的空闲的内存空间。
如图10所示,还包括第三获取子模块101、计算子模块102、第二确认子模块103和第三确认子模块104。
该第三获取子模块101,用于获取所述新的空闲的内存空间中的地址区间的起始地址和终止地址;
计算子模块102,用于将所述终止地址的数值减去所述变量占据的内存空间的数值,将上述减法运算的结果加上自然数1,确认所述加法运算的结果为极限地址;
第二确认子模块103,用于确认所述起始地址与所述极限地址之间的地址区间为合理区间;
第三确认子模块104,用于当所述变量的地址在所述合理区间之内时,确认所述变量的地址为所述新的空闲的内存空间中的地址。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (10)
1.一种避免内存地址冲突的方法,其特征在于,包括:
当主程序调用普通函数时,判断所述普通函数对所述主程序中变量的地址的变更操作;
判断所述变更操作之后的所述变量的地址是否与主程序中的其他变量的地址冲突;
当所述变更操作之后的所述变量的地址与主程序中的其他变量的地址冲突时,系统指定出新的空闲的内存空间;
将所述变量的地址修改为所述新的空闲的内存空间中的地址。
2.如权利要求1所述的方法,其特征在于,所述当主程序调用普通函数时,判断所述普通函数对所述主程序中变量的地址的变更操作,包括:
当所述主程序调用普通函数时,判断所述普通函数是否对所述主程序中的变量的进行了参数引用;
当所述普通函数对所述主程序中的变量的存在参数引用时,判断所述普通函数是否对所述主程序中的所述变量的地址进行了调用;
当所述普通函数对所述主程序中的所述变量的地址进行了调用时,判断所述普通函数是否对所述主程序中的所述变量的地址进行了变更操作。
当所述普通函数对所述主程序中的所述变量的地址进行了调用时,判断。
3.如权利要求2所述的方法,其特征在于,所述判断所述变更操作之后的所述变量的地址是否与主程序中的其他变量的地址冲突,包括:
获取主程序中所有变量所占据的内存空间;
分析出所述主程序中所有变量所占据的内存空间的地址区间;
判断所述变更操作之后的所述变量的地址是否在所述地址区间之内。
4.如权利要求1所述的方法,其特征在于,所述当所述变更操作之后的所述变量的地址与主程序中的其他变量的地址冲突时,系统指定出新的空闲的内存空间,包括:
当所述变更操作之后的所述变量的地址与主程序中的其他变量的地址冲突时,获取所述变量占据的内存空间的数值;
系统遍历当下内存空间中处于空闲状态的所有的连续内存空间;
选择内存空间的数值大于所述变量占据的内存空间的数值的所述连续内存空间;
确定所述连续内存空间为所述系统指定出新的空闲的内存空间。
5.如权利要求1所述的方法,其特征在于,所述将所述变量的地址修改为所述新的空闲的内存空间中的地址,包括:
获取所述新的空闲的内存空间中的地址区间的起始地址和终止地址;
将所述终止地址的数值减去所述变量占据的内存空间的数值,将上述减法运算的结果加上自然数1,确认所述加法运算的结果为极限地址;
确认所述起始地址与所述极限地址之间的地址区间为合理区间;
当所述变量的地址在所述合理区间之内时,确认所述变量的地址为所述新的空闲的内存空间中的地址。
6.一种避免内存地址冲突的装置,其特征在于,包括:
第一判断模块,用于当主程序调用普通函数时,判断所述普通函数对所述主程序中变量的地址的变更操作;
第二判断模块,用于判断所述变更操作之后的所述变量的地址是否与主程序中的其他变量的地址冲突;
指定模块,用于当所述变更操作之后的所述变量的地址与主程序中的其他变量的地址冲突时,系统指定出新的空闲的内存空间;
修改模块,用于将所述变量的地址修改为所述新的空闲的内存空间中的地址。
7.根据权利要求6的装置,其特征在于,所述第一判断模块,包括:
第一判断子模块,用于当所述主程序调用普通函数时,判断所述普通函数是否对所述主程序中的变量的进行了参数引用;
第二判断子模块,用于当所述普通函数对所述主程序中的变量的存在参数引用时,判断所述普通函数是否对所述主程序中的所述变量的地址进行了调用;
第三判断子模块,用于当所述普通函数对所述主程序中的所述变量的地址进行了调用时,判断所述普通函数是否对所述主程序中的所述变量的地址进行了变更操作。
8.根据权利要求6的装置,其特征在于,所述第二判断模块,包括:
第一获取子模块,用于获取主程序中所有变量所占据的内存空间;
分析子模块,用于分析出所述主程序中所有变量所占据的内存空间的地址区间;
第四判断子模块,用于判断所述变更操作之后的所述变量的地址是否在所述地址区间之内。
9.根据权利要求6的装置,其特征在于,所述指定模块,包括
第二获取子模块,用于当所述变更操作之后的所述变量的地址与主程序中的其他变量的地址冲突时,获取所述变量占据的内存空间的数值;
遍历子模块,用于系统遍历当下内存空间中处于空闲状态的所有的连续内存空间;
选择子模块,用于选择内存空间的数值大于所述变量占据的内存空间的数值的所述连续内存空间;
第一确定子模块,用于确定所述连续内存空间为所述系统指定出新的空闲的内存空间。
10.根据权利要求6的装置,其特征在于,所述修改模块,包括:
第三获取子模块,用于获取所述新的空闲的内存空间中的地址区间的起始地址和终止地址;
计算子模块,用于将所述终止地址的数值减去所述变量占据的内存空间的数值,将上述减法运算的结果加上自然数1,确认所述加法运算的结果为极限地址;
第二确认子模块,用于确认所述起始地址与所述极限地址之间的地址区间为合理区间;
第三确认子模块,用于当所述变量的地址在所述合理区间之内时,确认所述变量的地址为所述新的空闲的内存空间中的地址。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610721416.1A CN106371920A (zh) | 2016-08-24 | 2016-08-24 | 一种避免内存地址冲突的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610721416.1A CN106371920A (zh) | 2016-08-24 | 2016-08-24 | 一种避免内存地址冲突的方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106371920A true CN106371920A (zh) | 2017-02-01 |
Family
ID=57879059
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610721416.1A Pending CN106371920A (zh) | 2016-08-24 | 2016-08-24 | 一种避免内存地址冲突的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106371920A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108491287A (zh) * | 2018-03-21 | 2018-09-04 | 闻泰通讯股份有限公司 | 内存地址监控方法、装置及电子设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1980180A (zh) * | 2005-11-24 | 2007-06-13 | 武汉烽火网络有限责任公司 | 线速率学习和查找二层转发表项的方法和系统 |
CN101226488A (zh) * | 2008-01-25 | 2008-07-23 | 中兴通讯股份有限公司 | 多实例应用程序在内核态地址空间冲突的解决方法及系统 |
CN102331940A (zh) * | 2011-06-24 | 2012-01-25 | 浙大网新科技股份有限公司 | 一种将应用程序装载到安卓手机上的方法及系统 |
CN103279434A (zh) * | 2013-05-10 | 2013-09-04 | 青岛海信宽带多媒体技术有限公司 | 从设备地址修改方法和装置 |
CN103309684A (zh) * | 2012-03-07 | 2013-09-18 | 腾讯科技(深圳)有限公司 | 动态加载应用的方法及装置 |
-
2016
- 2016-08-24 CN CN201610721416.1A patent/CN106371920A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1980180A (zh) * | 2005-11-24 | 2007-06-13 | 武汉烽火网络有限责任公司 | 线速率学习和查找二层转发表项的方法和系统 |
CN101226488A (zh) * | 2008-01-25 | 2008-07-23 | 中兴通讯股份有限公司 | 多实例应用程序在内核态地址空间冲突的解决方法及系统 |
CN102331940A (zh) * | 2011-06-24 | 2012-01-25 | 浙大网新科技股份有限公司 | 一种将应用程序装载到安卓手机上的方法及系统 |
CN103309684A (zh) * | 2012-03-07 | 2013-09-18 | 腾讯科技(深圳)有限公司 | 动态加载应用的方法及装置 |
CN103279434A (zh) * | 2013-05-10 | 2013-09-04 | 青岛海信宽带多媒体技术有限公司 | 从设备地址修改方法和装置 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108491287A (zh) * | 2018-03-21 | 2018-09-04 | 闻泰通讯股份有限公司 | 内存地址监控方法、装置及电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8365004B2 (en) | Configuring of intelligent electronic device | |
CN109376090A (zh) | 软件自动测试方法及装置 | |
CN110096445A (zh) | 一种模型在环测试方法及装置 | |
CN102789401B (zh) | 基于柔性测试技术的测试流程控制方法和装置 | |
CN115115190A (zh) | 一种基于工况的质量监控方法及相关装置和程序介质产品 | |
CN105550117B (zh) | 一种测试应用程序运行帧率的方法及移动终端 | |
CN106371920A (zh) | 一种避免内存地址冲突的方法及装置 | |
CN106874047A (zh) | 分布式系统调度方法、装置及分布式系统 | |
CN108334335A (zh) | 一种软件源代码版本确定方法及装置 | |
CN113806594A (zh) | 基于决策树的业务数据处理方法、装置、设备及存储介质 | |
CN111966383A (zh) | 一种操作系统内核兼容性量化分析方法、系统和介质 | |
CN113282063B (zh) | 缝制产线的配置方法及装置 | |
CN110334018A (zh) | 一种大数据导入方法以及相关设备 | |
CN106202374A (zh) | 一种数据处理方法及装置 | |
CN110543994A (zh) | 信息处理方法、装置、可读存储介质和电子设备 | |
CN112559313A (zh) | 测试用例的设置方法及装置、存储介质、电子设备 | |
CN106371899A (zh) | 一种线程参数的处理方法及装置 | |
CN111679986B (zh) | 一种软件测试方法、装置及电子设备 | |
CN115187097A (zh) | 一种任务排期方法、装置、电子设备以及计算机存储介质 | |
CN104572036B (zh) | 事件的处理方法及装置 | |
CN109871276B (zh) | 一种基于Lua获取手机应用内存的方法及装置 | |
CN109408235A (zh) | 一种数据处理方法及装置、一种计算设备及存储介质 | |
CN108920217B (zh) | 一种减少不可重入函数的重构方法 | |
CN107229472A (zh) | 一种界面切换方法及装置、计算机装置和可读存储介质 | |
CN114371954A (zh) | 一种微服务系统的自动恢复方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20170201 |
|
RJ01 | Rejection of invention patent application after publication |