一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种持久性内存分配方法及装置与流程

2022-07-31 08:24:32 来源:中国专利 TAG:


1.本技术涉及计算机领域,尤其涉及一种持久性内存分配方法及装置。


背景技术:

2.随着计算机技术的发展,电子设备中的应用程序可能会频繁地进行多种粒度的内存分配请求,这对持久性内存的管理系统提出了极高的要求。目前,内存管理系统中为了方便对内存空间的管理,通常删除被占用的内存所对应的节点。当被占用的内存释放时,又将被释放的内存所对应的节点重新插入。在插入内存节点时,为了使得该节点被插入至其对应的位置,还需要对内存进行一次遍历来进行查找。对于内存节点的插入操作和删除操作,会占用电子设备的中央处理器(central processingunit,cpu)大量的时间,消耗了电子设备大量的计算资源。


技术实现要素:

3.为了解决上述技术问题,本技术提供了一种持久性内存分配方法及装置,用于提高电子设备内存的使用效率,节省电子设备的计算资源。
4.为了实现上述目的,本技术实施例提供的技术方案如下:
5.本技术实施例提供一种持久性内存分配方法,所述方法应用于电子设备,包括:接收待存储数据的内存请求;将所述待存储数据的大小与内存中具有空闲标记的内存区间[a,b]的内存大小进行比较;所述空闲标记指示具有所述空闲标记的内存为空闲内存;a、b均为数值,且a小于b;当内存区间[a,b]的内存大小大于所述待存储数据的大小时,将内存区间[a,(b-a)/2n a]的内存大小与所述待存储数据的大小进行比较;n为正整数;当内存区间[a,(b-a)/2n a]的内存大小小于所述待存储数据的大小且内存区间[a,(b-a)/2
n-1
a]的内存大小大于所述待存储数据的大小时,将所述待存储数据存入内存区间[a,(b-a)/2
n-1
a]。
[0006]
作为一种可能的实施方式,还包括:将内存区间[a,(b-a)/2
n-1
a]的空闲标记修改为使用标记,所述使用标记指示具有使用标记的内存为被使用的内存。
[0007]
作为一种可能的实施方式,所述当内存区间[a,b]的内存大小大于所述待存储数据的大小时,将内存区间[a,(b-a)/2n a]的内存大小与所述待存储数据的大小进行比较,包括:所述当内存区间[a,b]的内存大小大于所述待存储数据的大小时,将内存区间[a,(b-a)/2k a]的内存大小与所述待存储数据的大小进行比较;所述当内存区间[a,(b-a)/2k a]的内存大小大于所述待存储数据的大小时,将内存区间[a,(b-a)/2
k 1
a]的内存大小与所述待存储数据的大小进行比较。
[0008]
作为一种可能的实施方式,还包括:当所述内存的管理系统初始化时,将内存中的内存区间[x,y]设置为根节点,并将内存区间[x,(x y)/2]设置为所述根节点的第一子节点,将内存区间设置为所述根节点的第二子节点;x、y均为数值,且y大于x。
[0009]
作为一种可能的实施方式,还包括:当所述内存中的内存区间[a,(b-a)/2n a]中
的数据被删除时,将所述内存区间[a,(b-a)/2n a]的使用标记修改为空闲标记。
[0010]
作为一种可能的实施方式,还包括:确定所述内存中的内存区间[(b-a)/2n a,(b-a)/2
n-1
a]的标记是否为空闲标记;当内存区间[(b-a)/2n a,(b-a)/2
n-1
a]的标记为空闲标记时,将内存区间[a,(b-a)/2
n-1
a]的标记修改为空闲标记。
[0011]
作为一种可能的实施方式,所述持久性内存包括使用字节可以寻址的非易失性存储器。
[0012]
根据上述实施例提供的持久性内存分配方法,本技术实施例还提供了一种持久性内存分配装置,所述装置应用于电子设备,包括:接收模块,用于接收待存储数据的内存请求;第一比较模块,用于将所述待存储数据的大小与内存中具有空闲标记的内存区间[a,b]的内存大小进行比较;所述空闲标记指示具有所述空闲标记的内存为空闲内存;a、b均为数值,且a小于b;第二比较模块,用于当内存区间[a,b]的内存大小大于所述待存储数据的大小时,将内存区间[a,(b-a)/2n a]的内存大小与所述待存储数据的大小进行比较;n为正整数;分配模块,用于当内存区间[a,(b-a)/2n a]的内存大小小于所述待存储数据的大小且内存区间[a,(b-a)/2
n-1
a]的内存大小大于所述待存储数据的大小时,将所述待存储数据存入内存区间[a,(b-a)/2
n-1
a]。
[0013]
作为一种可能的实施方式,还包括:第一标记修改模块,用于将内存区间[a,(b-a)/2
n-1
a]的空闲标记修改为使用标记,所述使用标记指示具有使用标记的内存为被使用的内存。
[0014]
作为一种可能的实施方式,还包括:第二标记修改模块,用于当所述内存中的内存区间[a,(b-a)/2n a]中的数据被删除时,将所述内存区间[a,(b-a)/2n a]的使用标记修改为空闲标记。
[0015]
通过上述技术方案可知,本技术具有以下有益效果:
[0016]
本技术实施例提供了一种持久性内存分配方法,该方法应用于电子设备,包括:接收待存储数据的内存请求;将待存储数据的大小与内存中具有空闲标记的内存区间[a,b]的内存大小进行比较;空闲标记指示具有空闲标记的内存为空闲内存;a、b均为数值,且a小于b;当内存区间[a,b]的内存大小大于待存储数据的大小时,将内存区间[a,(b-a)/2n a]的内存大小与待存储数据的大小进行比较;n为正整数;当内存区间[a,(b-a)/2n a]的内存大小小于待存储数据的大小且内存区间[a,(b-a)/2
n-1
a]的内存大小大于待存储数据的大小时,将待存储数据存入内存区间[a,(b-a)/2
n-1
a],并将内存区间([a,(b-a))/(2^(n-1) a])的空闲标记修改为使用标记,所述使用标记指示具有使用标记的内存为被使用的内存。
[0017]
由此可知,本技术实施例提供的持久性内存分配方法,通过空闲标记对空闲的内存区间进行标定,使用标记对被使用的内存区间进行标定,可以较为清晰地区分已被使用的内存区间和未被使用的内存区间,避免了传统技术中在持久性内存管理系统中将被使用的内存删除和将可使用的内存插入的操作。由于删除和插入的操作相比于对内存区间进行标记需要消耗更多的计算资源,本技术实施例提供的方法可以节省电子设备的计算资源,提升内存的使用效率。
附图说明
[0018]
为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现
有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0019]
图1为本技术实施例提供的一种持久性内存分配方法的流程图;
[0020]
图2为本技术实施例提供的一种内存管理系统的数据结构图;
[0021]
图3为本技术实施例提供的一种内存的管理系统初始化的示意图;
[0022]
图4为本技术实施例提供的一种持久性内存分配方法的示意图;
[0023]
图5为本技术实施例提供的一种内存释放方法的示意图;
[0024]
图6为本技术实施例提供的一种持久性内存分配装置的示意图。
具体实施方式
[0025]
为了帮助更好地理解本技术实施例提供的方案,在介绍本技术实施例提供的方法之前,先介绍本技术实施例方案的应用的场景。
[0026]
大数据情境下,应用程序会频繁地进行多种粒度的持久性内存分配请求,这对于持久性内存系统管理提出了极高的要求。现今nvml编程模型中采用字典树来管理持久性内存空间。当应用程序请求分配持久性内存空间时,系统首先会遍历字典树结构,查找到一块能够满足请求的连续空闲空间,然后给应用程序分配一块其所请求的大小的空间。一般来说,这些请求所需要分配的内存空间大小,与现今nvml中字典树的叶子节点所管理的空间大小(或其整数倍)不尽相同,这样的内存请求会引发一次字典树节点的删除操作与插入操作,这些操作都需要动态分配dram空间。并且每次对于树节点的删除、插入操作,都需要对相关进程加互斥锁,以保证叶子节点更新的原子性,这还会占用大量宝贵的cpu时间。另外,在多次分配持久性内存之后,剩余的连续空闲空间大小如果不能满足新发起的分配请求(此时内存的总空闲空间大小可以满足分配请求),存储系统会整理内存碎片,用以满足应用程序请求的连续内存空间。整理内存碎片的过程会涉及字典树管理结构的遍历与重建,持久性内存内容的拷贝删除等操作。此方案存在较大时间与空间开销。
[0027]
为了解决上述的技术问题,本技术实施例提供了一种持久性内存分配方法,该方法应用于电子设备,包括:接收待存储数据的内存请求;将待存储数据的大小与内存中具有空闲标记的内存区间[a,b]的内存大小进行比较;空闲标记指示具有空闲标记的内存为空闲内存;a、b均为数值,且a小于b;当内存区间[a,b]的内存大小大于待存储数据的大小时,将内存区间[a,(b-a)/2n a]的内存大小与待存储数据的大小进行比较;n为正整数;当内存区间[a,(b-a)/2n a]的内存大小小于待存储数据的大小且内存区间[a,(b-a)/2
n-1
a]的内存大小大于待存储数据的大小时,将待存储数据存入内存区间[a,(b-a)/2
n-1
a]。
[0028]
由此可知,本技术实施例提供的持久性内存分配方法,通过空闲标记对空闲的内存区间进行标定,通过使用标记对被使用的内存区间进行标定,避免了在持久性内存管理系统中对可用内存的插入和删除操作。由于删除和插入的操作相比于对内存区间进行标记需要消耗更多的计算资源,本技术实施例提供的方法可以节省电子设备的计算资源,提升内存的使用效率。
[0029]
为使本技术的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本技术实施例作进一步详细的说明。
[0030]
参见图1,该图为本身实施例提供的一种持久性内存分配方法的流程图。
[0031]
如图1所示,本技术实施例提供的一种持久性内存分配方法,该方法应用于电子设备,该方法包括:
[0032]
s101:接收待应用程序的内存请求。
[0033]
s102:将内存请求对应的待存储数据的大小与内存中具有空闲标记的内存区间[a,b]的内存大小进行比较;空闲标记指示具有空闲标记的内存为空闲内存;a、b均为数值,且a小于b。
[0034]
s103:当内存区间[a,b]的内存大小大于待存储数据的大小时,将内存区间[a,(b-a)/2n a]的内存大小与待存储数据的大小进行比较;n为正整数。
[0035]
s104:当内存区间[a,(b-a)/2n a]的内存大小小于待存储数据的大小且内存区间[a,(b-a)/2
n-1
a]的内存大小大于待存储数据的大小时,将待存储数据存入内存区间[a,(b-a)/2
n-1
a]。
[0036]
本技术实施例提供的持久性内存分配方法应用于电子设备。电子设备可以是相机、手机、平板电脑、桌面型、膝上型、笔记本电脑、超级移动个人计算机(ultra-mobile personal computer,umpc)、手持计算机、上网本、个人数字助理(personal digital assistant,pda)、可穿戴电子设备、智能手表等设备。本技术中的方法的执行主体可以为电子设备,也可以为电子设备中的内存管理系统,例如持久性内存管理系统。
[0037]
当本技术实施将待存储数据存入内存区间[a,(b-a)/2
n-1
a]后,可以将内存区间[a,(b-a)/2
n-1
a]的空闲标记修改为使用标记,所述使用标记指示具有使用标记的内存为被使用的内存。作为一个示例,空闲内存标记可以为“0”,使用内存标记可以为“1”,本技术实施例在此不做限定。需要说明的是,传统的内存管理系统中为了方便对内存空间的管理,通常删除被占用的内存所对应的节点。当被占用的内存释放时,又将被释放的内存所对应的节点重新插入。而且,如果空闲的内存节点的空间为5个单位的存储空间,此时需要使用的内存区间为3个单位的存储空间,传统的内存管理系统会将该内存节点删除,并重新插入一个空间为2个单位的内存节点。对于内存节点的插入操作和删除操作,会占用电子设备的中央处理器(central processing unit,cpu)大量的时间,消耗了电子设备大量的计算资源。而本技术实施例通过空闲内存标记和使用内存标记,避免了对内存区间所在节点的删除操作和插入操作,节省电子设备的计算资源。
[0038]
作为一种可能的实施方式,当内存的管理系统初始化时,将内存中的内存区间[x,y]设置为根节点,并将内存区间[x,(x y)/2]设置为根节点的第一子节点,将内存区间设置为根节点的第二子节点;x、y均为数值,且y大于x。
[0039]
参见图2,该图为本技术实施例提供的一种内存管理系统的数据结构图。
[0040]
如图2所示,持久性内存空间(persistentmemory)的物理布局由持久性内存由内存池头部(memorypool header)、内存池描述符(memory pool descriptor)、通道区域(lane)和持久性内存堆(persistent heap)组成。内存池头部大小可以为4kb,用于记录与内存池相关的信息,例如标识符、版本号、创建时间、访问权限等。内存池描述符大小可以为2kb,用于描述当前内存布局的名称、第一个通道区域的起始位置偏移、总通道区域数量、持久性内存堆的起始位置偏移和大小、校验和等信息。本技术实施例中的通道区域是特殊的
日志区,一般数目为1024个。剩余的全部物理空间为持久性内存堆区域,即真正用来存放用户数据的空间。该区域包括一个用于记录相关信息的头部区域(heap header),之后的空间按照数据区(zone)等分,默认配置下,每个zone大小最小为768kb,最大为15gb。作为一个示例,每个zone内部同样包含一个头部结构(zone header),之后是统一存放的数据块头部(chunk header)以及一些大小为256kb的数据块(chunk)区域。每个chunk header记录对应数据块的类型、标记等信息。chunk有两种类型,一种是用于分配大块内存空间的,此时chunk整体进行分配,无需进一步细分。另外一种是用于分配小于256kb的空间的,此时chunk被称为活动数据块(run),run会继续细分。每个用作run的chunk会在头部添加位图(bit-map)信息来管理数据块内小粒度空间的使用情况。
[0041]
本技术实施例中的内存管理系统中的辅助内存管理(metadata)的静态树结构:由于持久性内存的写延迟较高,本发明在易失性内存dram中建立一种辅助元数据结构来加速分配过程。当需要分配小块的内存时,就将chunk按照某个小粒度进行划分,同时在chunk header以位图的形式记录每个小粒度空间的空闲状态,并根据位图信息在dram中创建对应的元数据结构。该元数据结构是一种静态树结构,即在系统启动时即创建完毕,并且在管理持久性内存过程中保持树结构不变。该静态树结构的每个节点都表示一段连续的持久性内存区间,为了快速进行空闲空间定位,需要对该结构进行快速的查找,本发明将该元数据结构设计成一种平衡的二叉排序树,即对于树中每一个非叶子节点[x,y],其左子树管理空间[x,(x y)/2],右子树管理空间[(x y)/2 1,y]。使用该元数据结构进行查找的时间复杂度为o(logn),其中n为管理的小粒度内存块数量。作为一个示例,图2中metadata部分展示了一个管理持久性内存区间[0,7]的元数据结构,每个节点管理一段内存区间,所有的叶子节点表示的是单位区间。该元数据结构是一种递归结构,两个子节点所管理区间的并即为其父节点的管理区间,因此可以通过自底向上的计算,得到每个节点的信息。
[0042]
参见图3,该图为本技术实施例提供的一种内存的管理系统初始化的示意图。
[0043]
如图3所示,电子设备的系统启动时要初始化持久性内存管理模块,可以在动态随机存取存储器(dynamic randomaccess memory,dram)中构建辅助管理的静态树结构。该元数据结构的构造是一个二分递归的过程,总体思路就是从区间[1,n]开始拆分(其中n为所要管理的持久性内存空间的块数目),拆分方式为二分的形式,将左半区间分配给左子树,右半区间分配给右子树,然后继续递归构造左右子树。当拆分到单位区间时(即遍历到了叶子节点,此时节点的左地址等于右地址,叶子节点管理一个内存块),则执行回溯操作。回溯时对于任何一个非叶子节点需要根据两棵子树的情况进行统计,计算当前节点的数据域。
[0044]
作为一种可能的实施方式,当内存区间[a,b]的内存大小大于待存储数据的大小时,本技术实施例中将内存区间[a,(b-a)/2n a]的内存大小与待存储数据的大小进行比较,可以包括:将内存区间[a,(b-a)/2k a]的内存大小与待存储数据的大小进行比较;当内存区间[a,(b-a)/2k a]的内存大小大于待存储数据的大小时,将内存区间[a,(b-a)/2
k 1
a]的内存大小与待存储数据的大小进行比较。
[0045]
作为一个示例,可以先将内存区间[a,(b-a)/2 a]的内存大小与待存储数据的大小进行比较。当内存区间[a,(b-a)/2 a]的内存大小大于待存储数据的大小时,将内存区间[a,(b-a)/22 a]的内存大小与待存储数据的大小进行比较。当内存区间[a,(b-a)/22 a]的内存大小大于待存储数据的大小时,将内存区间[a,(b-a)/23 a]的内存大小与待存储数据
的大小进行比较,以此类推。假设内存区间[a,(b-a)/23 a]的内存大小小于待存储数据的大小时,将待存储数据存入内存区间[a,(b-a)/22 a]。
[0046]
为了更好地理解本技术实施例提供的持久性内存分配方法,下面将通过一个示例来对本技术实施例中的持久性内存分配方法进行介绍。
[0047]
参见图4,该图为本技术实施例提供的一种持久性内存分配方法的示意图。
[0048]
如图4所示,应用程序发出内存请求时,系统进行持久性内存分配,需要对已建立完毕的静态树结构进行一次搜索,找到适合分配请求的内存区间,同时对相关的节点信息进行相应的修改。该元数据结构的更新也采用二分的方法,将[1,n]区间不断拆分成一个个子区间[a,b],当更新区间[x,y]适配(适配指空闲空间可以满足分配请求,但二分之后不能满足)被拆分的区间[a,b]时,则更新[a,b]区间的节点的数据域。具体过程如图4所示:如果区间[a,b]不能满足区间[x,y]分配需求,则直接返回。如果区间[x,y]适配区间[a,b],则更新相应节点数据域。
[0049]
作为一种可能的实施方式,当内存中的内存区间[a,(b-a)/2n a]中的数据被删除时,可以将内存区间[a,(b-a)/2n a]的使用标记修改为空闲标记。具体地,在将内存区间[a,(b-a)/2n a]的使用标记修改为空闲标记后,还可以确定内存中的内存区间[(b-a)/2n a,(b-a)/2
n-1
a]的标记是否为空闲标记;当内存区间[(b-a)/2n a,(b-a)/2
n-1
a]的标记为空闲标记时,将内存区间[a,(b-a)/2
n-1
a]的标记修改为空闲标记。
[0050]
需要说明的是,传统的内存管理在在多次分配持久性内存之后,剩余的连续空闲空间大小如果不能满足新发起的分配请求(此时内存的总空闲空间大小可以满足分配请求),存储系统会整理内存碎片,用以满足应用程序请求的连续内存空间。整理内存碎片的过程会涉及字典树管理结构的遍历与重建,持久性内存内容的拷贝删除等操作,这些操作将消耗大量的时间。而本技术实施例提供的方法,在内存区间被释放时,就对内存区间邻近的空间进行整合,在一定程度上避免了连续空闲空间大小如果不能满足新发起的分配请求,但内存的总空闲空间大小可以满足分配请求的情况。
[0051]
参见图5,该图为本技术实施例提供的一种内存释放方法的示意图。
[0052]
当应用程序释放一块持久性内存空间时,系统首先根据该空间的起始地址和终止地址在静态树结构上搜索到对应的节点,然后将其标记修改为空闲。另外,在回收应用程序释放的持久性内存空间之后,系统还会整理持久性内存碎片(即将小块的空闲空间整理成为连续的空间)。如图5所示,本技术实施例提供的内存释放方法还可以包括:根据释放区间对应的节点检索静态树结构,查看其兄弟节点(例如内存区间[a,(b-a)/2
n-1
a]和内存区间[(b-a)/2n a,(b-a)/2
n-1
a])是否未被占用。如果兄弟节点空间空闲,则该节点可以与兄弟节点合并成为更大的连续空闲空间,此时要修改它们父节点的标记为空闲状态。这个过程递归回溯地进行,直到兄弟节点标记为占用或者到达根节点为止。
[0053]
综上所述,本技术实施例提供的持久性内存分配方法,通过空闲标记对空闲的内存区间进行标定,使用标记对被使用的内存区间进行标定,可以较为清晰地区分已被使用的内存区间和未被使用的内存区间,避免了传统技术中在持久性内存管理系统中将被使用的内存删除和将可使用的内存插入的操作。如此,本技术实施例提供的方法可以节省电子设备的计算资源,提升内存的使用效率。
[0054]
根据上述实施例提供的持久性内存分配方法,本技术实施例还提供了一种持久性
内存分配装置。
[0055]
参见图6,该图为本技术实施例提供的一种持久性内存分配装置的示意图。
[0056]
如图6所示,本技术实施例提供的持久性内存分配装置包括:
[0057]
接收模块100,用于接收待存储数据的内存请求。
[0058]
第一比较模块200,用于将所述待存储数据的大小与内存中具有空闲标记的内存区间[a,b]的内存大小进行比较;所述空闲标记指示具有所述空闲标记的内存为空闲内存;a、b均为数值,且a小于b。
[0059]
第二比较模块300,用于当内存区间[a,b]的内存大小大于所述待存储数据的大小时,将内存区间[a,(b-a)/2n a]的内存大小与所述待存储数据的大小进行比较;n为正整数。
[0060]
分配模块400,用于当内存区间[a,(b-a)/2n a]的内存大小小于所述待存储数据的大小且内存区间[a,(b-a)/2
n-1
a]的内存大小大于所述待存储数据的大小时,将所述待存储数据存入内存区间[a,(b-a)/2
n-1
a]。
[0061]
作为一种可能的实施方式,本技术实施例提供的装置还可以包括:第一标记修改模块,用于将内存区间[a,(b-a)/2
n-1
a]的空闲标记修改为使用标记,所述使用标记指示具有使用标记的内存为被使用的内存。
[0062]
作为一种可能的实施方式,本技术实施例提供的装置还可以包括:第二标记修改模块,用于当所述内存中的内存区间[a,(b-a)/2n a]中的数据被删除时,将所述内存区间[a,(b-a)/2n a]的使用标记修改为空闲标记。
[0063]
综上所述,本技术实施例提供的持久性内存分配装置,通过对空闲的内存区间进行二分,可以在不受内存的存储粒度的影响,得到较为合适待存储数据的内存区间。如此,本技术实施例提供的方法可以能够快速高效地分配特定大小的持久性内存空间,减少持久性内存碎片,提升内存的使用效率。
[0064]
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到上述实施例方法中的全部或部分步骤可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者诸如媒体网关等网络通信设备,等等)执行本技术各个实施例或者实施例的某些部分所述的方法。
[0065]
需要说明的是,本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的方法而言,由于其与实施例公开的系统相对应,所以描述的比较简单,相关之处参见系统部分说明即可。
[0066]
还需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0067]
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本技术对
这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本技术的精神或范围的情况下,在其它实施例中实现。因此,本技术将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献