一种内存使用管理方法、装置及存储介质与流程

文档序号:20009222发布日期:2020-02-22 03:54阅读:117来源:国知局
本申请涉及内存管理
技术领域
:,具体涉及一种内存使用管理方法、装置及存储介质。
背景技术
::数据通信设备最基础的功能是网络报文的接收和发送,最频繁使用的是网络硬件buffer(buffer可翻译为内存或缓冲区、缓冲器),即nic(networkinterfacecontroller,网络控制器)接收报文和发送报文利用的硬件buffer。目前主流的网络设备芯片厂商通过将报文收发的协处理器集成在芯片soc上,通过硬件管理网络硬件buffer的申请和释放。cpu搭配intel网卡芯片,intel网卡收报文后通过pcie(peripheralcomponentinterconnectexpress,一种高速串行总线协议)总线将数据搬运至cpu。此时cpu端硬件buffer的申请和释放需要软件来管理。软件管理硬件buffer的效率将是影响设备吞吐性能的最大因素,图1为报文接收发送示意图。一般cpu侧有一个发送、接收环。环中有若干个描述符。以接收为例,每次nic收到报文会将报文放入环中描述符所指向的空间中,当接收环中的描述符被使用完后,网卡无法再接收新报文,因此接收报文的同时需要更新描述符中的地址。通用的一种情况是cpu将报文送到硬件buffer后,此硬件buffer继续被其它功能(转发功能、报文检测等)使用,当使用完成后其它功能通知驱动该硬件buffer使用完毕可以回收,之后该硬件buffer才能继续更新到新的描述符中。报文接收的过程中需要不停的将新的空闲地址更新到描述符中。由于cpu的空间是有限的,因此软件需要一种策略来维护硬件buffer的申请和释放,以使描述符能够快速更新硬件buffer。如图2所示的现有的技术方案,通过链表或者队列维护一个可用硬件buffer的集合,事先将buffer分配好,放入链表/队列中。每次cpu从链表/队列中取一个buffer放入收发环中作为自己的硬件buffer。当buffer被使用结束后,再将buffer返回链表或者队列中。每次需要更新描述符时从链表头中取出一个硬件buffer,该buffer从链表中删掉。当硬件buffer被使用结束时将该硬件buffer插入链表尾部。在收发流程中频繁的申请链表节点、删除链表节点,需要申请链表节点资源,多核并发时效率较低。技术实现要素:本申请的目的是提供一种内存使用管理方法、装置及存储介质。为了对披露的实施例的一些方面有一个基本的理解,下面给出了简单的概括。该概括部分不是泛泛评述,也不是要确定关键/重要组成元素或描绘这些实施例的保护范围。其唯一目的是用简单的形式呈现一些概念,以此作为后面的详细说明的序言。根据本申请实施例的一个方面,提供一种内存使用管理方法,包括:对若干地址连续的buffer,分别用一个比特位来标记每一个所述buffer的状态;记录每个状态组合值的首个可用位的地址;所述状态组合值为所述比特位的值排列得到的值;所述首个可用位为状态组合值的二进制表达中的所述若干地址连续的buffer中第一个可用buffer对应的比特位;在接收到一个报文时,根据当前的状态组合值,查找到对应的首个可用位的地址,使用对应的buffer。进一步地,所述对若干地址连续的buffer,分别用一个比特位来标记每一个所述buffer的状态,包括:在物理内存中划分出若干地址连续的buffer,将所有buffer划分为若干buffer组;设定若干状态索引集合,每一所述状态索引集合包含若干比特位,用每一比特位对应标识一个buffer的状态,使所述若干状态索引集合与所述若干buffer组一一对应。进一步地,所述记录每个状态组合值的首个可用位的地址,包括:设定一位置索引集合,使所述位置索引集合的元素与最大的状态索引集合的所有可能出现的状态组合值一一对应,存储所述位置索引集合的所有元素的值;其中,所述元素的值为状态组合值的首个可用位的地址;各所述buffer组所包含的buffer的数量相同或不完全相同。进一步地,所述位置索引集合为表。进一步地,所述根据当前的状态组合值,查找到对应的首个可用位的地址,使用对应的buffer,包括:查找最近使用的状态索引集合,所述最近使用的状态索引集合为最近一次使用的buffer所对应的状态索引集合;根据所述最近使用的状态索引集合的当前的状态组合值,从所述位置索引集合中查找到当前元素,根据所述当前元素的值找到对应的buffer并使用该buffer;所述当前元素为对应于所述当前的状态组合值的元素。进一步地,所述方法还包括:在所述buffer被释放之后,根据所述buffer所对应的状态索引集合的编号以及所对应的比特位在状态索引集合中的位置,定位所述buffer所对应的比特位,修改所述buffer所对应的比特位的状态信息;其中,所述buffer所对应的状态索引集合的编号以及所对应的比特位在状态索引集合中的位置被记录在所述buffer中。根据本申请实施例的另一方面,提供一种内存使用管理装置,包括:标记模块,用于对若干地址连续的buffer,分别用一个比特位来标记每一个所述buffer的状态;记录模块,用于记录每个状态组合值的首个可用位的地址;所述状态组合值为所述比特位的值排列得到的值;所述首个可用位为状态组合值的二进制表达中的所述若干地址连续的buffer中第一个可用buffer对应的比特位;查找模块,用于在接收到一个报文时,根据当前的状态组合值,查找到对应的首个可用位的地址,使用对应的buffer。进一步地,所述标记模块包括:划分模块,用于在物理内存中划分出若干地址连续的buffer,将所有buffer划分为若干buffer组;映射模块,用于设定若干状态索引集合,每一所述状态索引集合包含若干比特位,用每一比特位对应标识一个buffer的状态,使所述若干状态索引集合与所述若干buffer组一一对应。进一步地,所述记录模块具体用于设定一位置索引集合,使所述位置索引集合的元素与最大的状态索引集合的所有可能出现的状态组合值一一对应,存储所述位置索引集合的所有元素的值;其中,所述元素的值为状态组合值的首个可用位的地址;各所述buffer组所包含的buffer的数量相同或不完全相同。根据本申请实施例的另一方面,提供一种非临时性计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行,以实现所述的内存使用管理方法。相较于现有技术,本申请实施例提供的技术方案可以包括以下有益效果:本申请实施例提供的内存使用管理方法,能够快速获取可用buffer,首次获取可用buffer的命中率高,对可用buffer的获取效率高、耗时少。本申请的其他特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者,部分特征和优点可以从说明书中推知或毫无疑义地确定,或者通过实施本申请实施例了解。本申请的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。附图说明为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为现有技术的报文收发过程示意图;图2为现有技术的buffer维护链表示意图;图3为本申请的一个实施例的内存使用管理方法流程图;图4为本申请的一个实施例的内存使用管理装置结构框图;图5为本申请的另一实施例的内存使用管理方法流程图;图6为本申请的一实施例的buffer组与状态索引集合的对应关系示意图;图7为本申请一实施例中查找buffer的程序流程图;图8为本申请一实施例的buffer结构示意图。具体实施方式为了使本申请的目的、技术方案及优点更加清楚明白,下面结合附图和具体实施例对本申请做进一步说明。应当理解,此处所描述的具体实施例仅用以解释本申请,并不用于限定本申请。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。本
技术领域
:技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本申请所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。如图3所示,本申请的一个实施例提供了一种内存使用管理方法100,包括:s101、对若干地址连续的buffer,分别用一个比特位来标记每一个所述buffer的状态。例如,设定当比特位的值为1时,代表与该比特位相对应的buffer处于可用状态,此时该比特位为可用比特位,1为可用状态值;设定当比特位的值为0时,代表与该比特位相对应的buffer处于不可用状态,此时该比特位为不可用比特位,0为不可用状态值。s102、记录每个状态组合值的首个可用位的地址;所述状态组合值为所述比特位的值排列得到的值;所述首个可用位为状态组合值的二进制表达中的所述若干地址连续的buffer中第一个可用buffer对应的比特位。例如,假设有16个buffer,则对应的16个比特位的值按buffer地址的顺序排列成一个二进制数,以该二进制数作为状态组合值,或者将该二进制数转换为其他进制的数作为状态组合值。对应于该16个buffer的状态组合值的个数为216=65536。例如,假设16个比特位的值排列为0011010110101000,可以用该二进制数作为状态组合值,也可以将该二进制数转换为十进制数13736,以十进制数13736作为状态组合值。所述首个可用位的地址为所述状态组合值的二进制值中的从左往右数或从右往左数的第一个可用比特位的位数序号。例如,假设状态组合值的二进制值为0011010110101000,则从右往左数的第一个可用比特位的位数序号为4,则对应于该状态组合值的首个可用位的地址为4。如果以其他进制例如十进制来表达该状态组合值,则该状态组合值的十进制数为13736,其对应的首个可用位的地址仍然为4。如果按照从左往右数的顺序来查找第一个可用比特位,则13736所对应的首个可用位的位数序号为3。s103、在接收到一个报文时,根据当前的状态组合值,查找到对应的首个可用位的地址,根据所述对应的首个可用位的地址,查找到对应的可用buffer,使用对应的buffer。例如,如果当前的状态组合值为13736,则对应的首个可用位的地址为4(从右往左数),则意味着第四个(从右往左数)buffer为可用buffer。s104、将使用完的buffer所对应的比特位恢复为可用比特位。在某些实施方式中,在所述buffer被使用完之后,根据所述buffer所对应的状态索引集合的编号以及所对应的比特位在状态索引集合中的位置,定位所述buffer所对应的比特位,修改所述buffer所对应的比特位的状态信息;其中,所述buffer所对应的状态索引集合的编号以及所对应的比特位在状态索引集合中的位置被记录在所述buffer中。例如,如果以比特位的值为1代表buffer可用,则当buffer被使用时,对应于该buffer的比特位的值为0,使用完该buffer后,将对应于该buffer的比特位的值恢复为1。在某些实施方式中,步骤s101包括:在物理内存中划分出若干地址连续的buffer,将所有buffer划分为若干buffer组;设定若干状态索引集合,每一所述状态索引集合包含若干比特位,用每一比特位对应标识一个buffer的状态,使所述若干状态索引集合与所述若干buffer组一一对应。各所述buffer组所包含的buffer的数量可以相同,或者,各所述buffer组所包含的buffer的数量也可以不完全相同。在某些实施方式中,步骤s102包括:设定一位置索引集合,使所述位置索引集合的元素与所有可能出现的状态组合值一一对应,存储所述位置索引集合的所有元素的值;所述元素的值为状态组合值的首个可用位的地址;所述所有可能出现的状态组合值为最大的状态索引集合的所有可能出现的状态组合值,所述最大的状态索引集合即所包含的比特位数量最多的状态索引集合。如果各所述buffer组所包含的buffer的数量相同,则各状态索引集合所包含的比特位的数量相同,使任一状态索引集合的所有可能出现的状态组合值与所述位置索引集合的元素一一对应即可;如果各所述buffer组所包含的buffer的数量不完全相同,则使最大的状态索引集合的所有可能出现的状态组合值与所述位置索引集合的元素一一对应即可。在某些实施方式中,步骤s103包括:查找最近使用的状态索引集合,所述最近使用的状态索引集合为最近一次使用的buffer所对应的状态索引集合;根据所述最近使用的状态索引集合的当前的状态组合值,从所述位置索引集合中查找到当前元素,根据所述当前元素的值找到对应的buffer并使用该buffer;所述当前元素为对应于所述当前的状态组合值的元素。如图4所示,本实施例还提供一种内存使用管理装置,包括:标记模块,用于对若干地址连续的buffer,分别用一个比特位来标记每一个所述buffer的状态;记录模块,用于记录每个状态组合值的首个可用位的地址;所述状态组合值为所述比特位的值排列得到的值;所述首个可用位为状态组合值的二进制表达中的所述若干地址连续的buffer中第一个可用buffer对应的比特位;查找模块,用于根据当前的状态组合值,查找到对应的首个可用位的地址,再查找到对应的可用buffer;复位模块,用于将使用完的buffer所对应的比特位恢复为可用比特位。在某些实施方式中,所述标记模块包括:划分模块,用于在物理内存中划分出若干地址连续的buffer,将所有buffer划分为若干buffer组;映射模块,用于设定若干状态索引集合,每一所述状态索引集合包含若干比特位,用每一比特位对应标识一个buffer的状态,使所述若干状态索引集合与所述若干buffer组一一对应。在某些实施方式中,所述记录模块具体用于设定一位置索引集合,使所述位置索引集合的元素与所有可能出现的状态组合值一一对应,存储所述位置索引集合的所有元素的值;所述元素的值为状态组合值的首个可用位的地址。在某些实施方式中,所述查找模块包括:第一查找模块,用于查找最近使用的状态索引集合,所述最近使用的状态索引集合为最近一次使用的buffer所对应的状态索引集合;第二查找模块,用于根据所述最近使用的状态索引集合的当前的状态组合值,从所述位置索引集合中查找到当前元素,根据所述当前元素的值找到对应的buffer并使用该buffer;所述当前元素为对应于所述当前的状态组合值的元素。本实施例还提供一种非临时性计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行,以实现所述的内存使用管理方法。如图5和图6所示,本申请的一个实施例提供了一种内存使用管理方法200,包括:s201、在物理内存中划分出若干地址连续的buffer,将所有buffer划分为若干buffer组。每个buffer组中包含的是地址连续的多个buffer。在某些实施方式中,申请m个地址连续的buffer,例如m可以为32;定义一个指针数组:char*pacbuffer[m];将m个buffer的地址按照顺序放入该指针数组*pacbuffer[m]中,得到buffer地址数组;将buffer地址数组划分为几个buffer组。s202、设定若干状态索引集合,每一所述状态索引集合包含若干比特位,用每一比特位对应标识一个buffer的状态,使所述若干状态索引集合与所述若干buffer组一一对应。比特位的值包括0和1两种状态;在某些实施方式中,当比特位的值为1时,代表与该比特位相对应的buffer处于可用状态,此时该比特位为可用比特位;当比特位的值为0时,代表与该比特位相对应的buffer处于不可用状态,此时该比特位为不可用比特位。每个状态索引集合可用标记一个编号。在某些实施方式中,申请具有n个元素的索引数组,n=m/16,例如当m=32时,n=2;定义一个索引数组:ushortusbufferindex[n]。该索引数组中的一个元素相当于一个状态索引集合。索引数组为ushort型数组(无符号短整型数组),每个索引数组元素占16bit(位)。索引数组用来标记m个连续buffer的状态。索引数组的元素中的每一bit用于标识buffer地址数组中每个硬件buffer的状态,一共需要m/8个字节用来标记内存。之所以用ushort类型定义索引数组,是因为后续快速定位buffer位置,需要牺牲空间换取时间效率。标记索引数组usbufferindex。usbufferindex中每个bit(位)用于标识一个硬件buffer的状态。bit为1表示该硬件buffer空闲,bit为0表示该硬件buffer正在被使用。初始化时,该索引数组每个bit上的值全为1。s203、设定一位置索引集合,使所述位置索引集合的元素与所有可能出现的状态组合值一一对应,存储所述位置索引集合的所有元素的值;所述元素的值为状态组合值的首个可用位的地址。所述状态组合值为所述状态索引集合的所有比特位的值排列形成的数,可以为所述状态索引集合的所有比特位的值排列形成的二进制数,也可以为该二进制数转换成的其他进制的数;假设状态索引集合总共包括n个比特位,则该状态索引集合可能出现的所有状态组合值的个数为2n,则位置索引集合所包含的元素的个数也为2n,使所有的状态组合值与位置索引集合的所有元素一一对应起来。位置索引集合的每个元素可以设置一个编号。所述元素的值为对应于该元素的状态组合值的首个可用位的地址;所述首个可用位为所述状态组合值的二进制表达中的从左往右数或从右往左数的第一个可用比特位;所述首个可用位的地址为所述状态组合值的二进制表达中的从左往右数或从右往左数的第一个可用比特位的位数序号;针对每一状态组合值所对应的二进制数,将该二进制数中的第一个可用比特位的位数序号作为对应于该状态组合值的元素的值。例如,如果某状态索引集合的某个状态组合值为0011001010011000,则该状态组合值的首个可用位序号为4(从右往左数)或3(从左往右数),则对应于该状态组合值的元素的值即为4或3,则意味着在与该状态索引集合相对应的buffer组中,从右往左数第4个buffer或从左往右数第3个buffer处于可用状态。所述位置索引集合可以为一个查找表。在某些实施方式中,维护一个查找表ucharg_uctable[65535]。该表包含65535个元素,每个元素占16bit(位)。每个元素的值代表的是该元素中首个可用位(以从右往左数为例)的位数序号。查找表元素元素值11223143…………137364…………655342655351例如,通过以上查找表可以查到,元素13736所对应的值为4。s204、查找最近使用的状态索引集合,所述最近使用的状态索引集合为最近一次使用的buffer所对应的状态索引集合。上次使用过的buffer所在的buffer组中存在可用buffer的概率较大,因此,为了提高获取可用buffer的首次命中率,选择从最近使用的buffer所在的buffer组中查找可用buffer。在某些实施方式中,维护一个数组ushortusposindex。该数组usposindex用于记录最近一次找到的可用硬件buffer所对应的状态索引集合usbufferindex的编号,所述数组usposindex中的数组元素的取值范围是0~n-1。从数组usposindex中查找最近使用的状态索引集合。s205、根据所述最近使用的状态索引集合的当前的状态组合值,从所述位置索引集合中查找到当前元素,根据所述当前元素的值找到对应的buffer并使用该buffer;所述当前元素为对应于所述当前的状态组合值的元素。如图7所示,为某实施方式的查找buffer的程序流程图。s206、在使用完一个buffer之后,将与该buffer相对应的比特位恢复为可用比特位。如果比特位的值为1代表对应的buffer处于可用状态,比特位的值为0代表对应的buffer处于不可用状态,则在buffer被使用完之后将该比特位的值从0恢复为1;在buffer的释放私有空间中记录与该buffer相对应的比特位位置信息;所述比特位位置信息包括所述比特位所在的状态索引集合的编号以及该比特位在所述状态索引集合中的位置。在某些实施方式中,在所述buffer被释放之后,根据所述buffer所对应的状态索引集合的编号以及所对应的比特位在状态索引集合中的位置,定位所述buffer所对应的比特位,修改所述buffer所对应的比特位的状态信息;其中,所述buffer所对应的状态索引集合的编号以及所对应的比特位在状态索引集合中的位置被记录在所述buffer中。如图8所示,每个硬件buffer头部预留一段空间作为buffer释放私有空间,报文空间不包括该私有空间。释放私有空间记录该硬件buffer在buffer索引usbufferindex中位置,具体到bit位。主要记录两个值,一个是usbufferindex中元素索引row(即状态索引集合),一个是在元素中的bit序号为column(即位置索引集合的元素的值)。每次使用完该硬件buffer后,可以根据row和column快速将bit位置为可用状态(例如置为1),表示该硬件buffer可用。本实施例的方法通过使用空间换取效率的方式,能够快速获取可用硬件buffer,获取速度快、效率高、耗时少,并且通过直接从最近使用的状态索引集合中查找可用buffer,将首次获取可用buffer的命中率提高到了92%左右;另外,本实施例的方法可以快速更新最近使用的状态索引集合,只需要“或+移位”操作即可完成更新。需要说明的是:术语“模块”并非意图受限于特定物理形式。取决于具体应用,模块可以实现为硬件、固件、软件和/或其组合。此外,不同的模块可以共享公共组件或甚至由相同组件实现。不同模块之间可以存在或不存在清楚的界限。在此提供的算法和显示不与任何特定计算机、虚拟装置或者其它设备固有相关。各种通用装置也可以与基于在此的示教一起使用。根据上面的描述,构造这类装置所要求的结构是显而易见的。此外,本申请也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本申请的内容,并且上面对特定语言所做的描述是为了披露本申请的最佳实施方式。在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本申请的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本申请的示例性实施例的描述中,本申请的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本申请要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本申请的单独实施例。本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本申请的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。本申请的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(dsp)来实现根据本申请实施例的虚拟机的创建装置中的一些或者全部部件的一些或者全部功能。本申请还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本申请的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。应该注意的是上述实施例对本申请进行说明而不是对本申请进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。本申请可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。以上所述实施例仅表达了本申请的实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1