A memory management method to reduce memory fragmentation

By combining variable-length and fixed-length memory pool management methods in a real-time operating system, the memory allocation process is optimized, the memory fragmentation problem is solved, the memory allocation efficiency is improved, and the operation requirements of the real-time operating system are met.

CN119668848BActive Publication Date: 2025-10-03四川长虹电子控股集团有限公司
View PDF 3 Cites 0 Cited by

Patent Information

Application Number
CN202411726550.1
Authority / Receiving Office
CN · China
Patent Type
Patents(China)
Current Assignee / Owner
Filing Date
2024-11-28
Publication Date
2025-10-03
Estimated Expiration
2044-11-28

AI Technical Summary

Technical Problem

The existing memory management method in the real-time operating system frequently divides the heap memory blocks, resulting in serious memory fragmentation and low allocation efficiency, which cannot meet the operation requirements of the real-time operating system.

Method used

A management method combining variable-length memory pool and fixed-length memory pool is adopted. By dividing the cache area in the heap area, creating linked list arrays and fixed-length memory pool linked lists, the memory allocation process is optimized, the frequency of heap memory block cutting is reduced, and memory utilization is improved.

Benefits of technology

It reduces memory fragmentation, improves memory allocation efficiency, and can better adapt to the running requirements of real-time operating systems.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure CN119668848B_ABST
    Figure CN119668848B_ABST
Patent Text Reader

Abstract

The present invention discloses a memory management method for reducing memory fragmentation, and relates to the technical field of memory management of real-time operating systems. The method mainly comprises the steps of heap area initialization, cache area initialization, memory allocation, and the like. By creating a linked list array → declaring a fixed-length memory pool linked list → a fixed-length memory pool → a memory block-data structure, a fixed-length memory pool cache area with multiple memory block sizes is constructed, thereby avoiding direct memory allocation from the heap area. In conjunction with this, heap area allocation adopts variable-length memory pool management. The combination of the two reduces the frequency of heap area memory block segmentation and reduces memory fragmentation. Not only is the allocation speed faster, but the memory blocks of the heap area and the memory blocks of the cache area can be reused, further reducing the frequency of heap area memory block segmentation, improving the efficiency of memory allocation, and being able to more closely adapt to the operation requirements of the real-time operating system.
Need to check novelty before this filing date? Find Prior Art

Description

Technical Field

[0001] The present invention relates to the technical field of memory management of real-time operating systems, and in particular to a memory management method for reducing memory fragmentation. Background Art

[0002] Memory management in a real-time operating system is a key component to ensure the real-time performance and stability of the real-time operating system. Memory management ensures the real-time performance and stability of the system through dynamic memory allocation, memory heap and memory pool management, and effective memory allocation algorithms, while reducing memory fragmentation and improving memory utilization.

[0003] Currently, if a real-time operating system's dynamic memory allocation method obtains a memory block larger than the requested memory block, it will split the memory block into two parts: one part is used to satisfy the memory request, and the other part is retained as a new free memory block in the memory heap area. For example, the memory management method for embedded systems disclosed in patent application number 201711347959.2 pre-sets the memory block size of the heap area during the memory pool creation phase and initializes it to a fixed-length memory pool structure. When a user makes a memory request, the memory block needs to be frequently split according to the user's memory size requirements. After multiple memory allocations and releases, a large number of small, discontinuous free areas will be left, resulting in a serious problem of memory fragmentation. For real-time operating systems, even if the total free memory amount is sufficient, the small blocks cannot be allocated as a single large memory block because the memory addresses are discontinuous. This results in low allocation efficiency and is unsuitable for the operating requirements of real-time operating systems. Summary of the Invention

[0004] The purpose of the present invention is to provide a memory management method that reduces memory fragmentation in order to solve the problem that the memory management method in the prior art frequently divides the memory blocks of the heap area, resulting in serious memory fragmentation, low allocation efficiency and failure to meet the operating requirements of a real-time operating system.

[0005] In order to achieve the above object, the technical solution adopted by the present invention is:

[0006] A memory management method for reducing memory fragmentation comprises the following steps:

[0007] S1, heap area initialization: initialize the memory of the heap area to a variable-length memory pool; create a free linked list of the variable-length memory pool; the free linked list is an empty node linked list;

[0008] S2. Cache initialization:

[0009] S21, allocating a plurality of first memory blocks from the heap area to form a cache area, and creating a linked list array corresponding to the first memory blocks;

[0010] S22. Creating a fixed-length memory pool linked list corresponding to each type of the first memory block according to the capacity type of the first memory block; the fixed-length memory pool linked list is an empty node linked list;

[0011] S23, placing the fixed-length memory pool linked list in the linked list array in ascending order of capacity of the corresponding first memory blocks, so that each array element of the linked list array represents a first memory block, and then declaring a fixed-length memory pool in the buffer area, and constructing a data structure of the buffer area;

[0012] S3, memory allocation:

[0013] S31. According to the size of the requested memory, query in the cache whether there is a fixed-length memory pool linked list that matches the size of the requested memory;

[0014] S311. If a matching fixed-length memory pool linked list is found, obtain the first node of the fixed-length memory pool linked list from the cache area, and return the obtained fixed-length memory pool; the fixed-length memory pool includes a pointer to a doubly linked list of free memory blocks;

[0015] S312: If no matching fixed-length memory pool linked list is found, allocating a second memory block from the heap area to the cache area; initializing the second memory block as a fixed-length memory pool; initializing the free linked list, constructing the fixed-length memory pool linked list; and adding the fixed-length memory pool to the fixed-length memory pool linked list.

[0016] S32, checking whether there is a free memory block in the bidirectional linked list;

[0017] S33. If the free memory block does not exist, return to execute step S312;

[0018] S34. If the free memory block exists, a fixed-length memory pool is allocated to respond to the user's request for memory.

[0019] The memory management method for reducing memory fragmentation described in the present invention is, first, by dividing the first memory into a cache area in the heap area, creating a linked list array, declaring the memory block of the cache area to correspond to the memory pool linked list, and then constructing the cache area into a data structure that declares the fixed-length memory pool linked list; when the user requests memory, the fixed-length memory pool can be directly queried from the cache area to obtain the fixed-length memory pool, and the first memory block of the requested memory is allocated in the fixed-length memory pool. Only when the fixed-length memory pool in the cache area cannot find the first memory block that meets the requested memory size requirement, the second memory block is allocated from the heap area, and there is no need to directly divide the memory of the heap area immediately, thereby reducing the frequency of memory division in the heap area, and reducing memory fragmentation at one time; second, if the fixed-length memory pool linked list cannot be found in the cache area, the second memory block is allocated from the heap area, and the second memory block is initialized accordingly. Into a variable-length memory pool, the aforementioned method creates a corresponding free linked list for the memory block of the heap area. The free linked list of the heap area and the fixed-length memory pool linked list of the cache area are both empty node linked lists, that is, they are only declared but not initialized, so it is easier to obtain a matching memory block. Then, by initializing the second memory block to the fixed-length memory pool in the allocation phase, and initializing the free linked list to the fixed-length memory pool linked list, the memory of the heap area can be quickly allocated to fixed-size memory blocks. Not only is the allocation speed faster, but the memory blocks of the heap area and the memory blocks of the cache area can be reused, which further reduces the frequency of memory block segmentation in the heap area. In short, this scheme combines the variable-length memory pool of the heap area with the fixed-length memory pool of the cache area to reduce the frequency of memory block cutting in the heap area, thereby reducing memory fragmentation, improving the efficiency of memory allocation, and being able to better adapt to the running requirements of the real-time operating system.

[0020] Preferably, the memory management method for reducing memory fragmentation described in the present invention, the S312 specifically includes the following steps: constructing the fixed-length memory pool into a node object of the fixed-length memory pool linked list, and declaring a next pointer and a prev pointer; pointing the next pointer to the head node of the fixed-length memory pool linked list; and pointing the prev pointer to the node of the next fixed-length memory pool.

[0021] As a preferred solution of the present invention, after the second memory block is initialized as a fixed-length memory pool, by constructing a node object of the fixed-length memory pool linked list as a fixed-length memory pool, and cooperating with the initialization of the free linked list, the creation of the fixed-length memory pool linked list can be further quickly completed, and in conjunction with the initialization of the fixed-length memory pool, the efficiency of memory allocation can be further improved.

[0022] Preferably, the memory management method for reducing memory fragmentation described in the present invention, the S31 specifically includes the following steps: traversing the linked list array, searching for the memory block corresponding to the subscript of the linked list array, and obtaining the matching fixed-length memory pool linked list from the linked list array through the subscript.

[0023] As a preferred solution of the present invention, by traversing the linked list array and searching for the corresponding fixed-length memory pool linked list by looking up the subscript, based on the data structure of the fixed-length memory pool, it is possible to quickly judge and obtain the fixed-length memory pool linked list, and return the obtained fixed-length memory pool, or execute the heap area allocation memory block, thereby further improving the efficiency of memory acquisition and further optimizing the memory management method.

[0024] The memory management method for reducing memory fragmentation described in the present invention, the S33 specifically also includes the following steps: when there are no free memory blocks in the bidirectional linked list, the next pointer and prev pointer of the fixed-length memory pool are both set to null pointers, thereby making the bidirectional linked list without free memory blocks detached from the fixed-length memory pool linked list.

[0025] As a preferred solution of the present invention, by checking whether there are free memory blocks in the bidirectional linked list, for the processing method of the non-existence of free memory blocks, the bidirectional linked list without free memory blocks can be modified while allocating the second memory block from the heap area, so that the bidirectional linked list that does not meet the free memory block requirements is separated from the fixed-length memory pool linked list, avoiding node identification errors in the found fixed-length memory pool linked list, ensuring that there are free memory blocks on the nodes on the fixed-length memory pool linked list, improving the accuracy of obtaining free memory blocks, realizing the maintenance of the fixed-length memory pool linked list, avoiding multiple checks, and further improving the memory allocation efficiency.

[0026] Preferably, the memory management method for reducing memory fragmentation according to the present invention further includes the following steps:

[0027] S4. Release the memory block:

[0028] S41, checking whether the address and capacity of the memory block in the cache area belong to the fixed-length memory pool; clearing business data of the third memory block that does not belong to the fixed-length memory pool;

[0029] S42: adding the third memory block to the bidirectional linked list, thereby enabling the bidirectional linked list to manage the third memory block;

[0030] S43, checking the free linked list of the buffer area and the memory space of the fixed-length memory pool;

[0031] S44: If the third memory block of the cache area and the memory space of the cache area are not in use, add the third memory block of the cache area to a free linked list of the heap area.

[0032] As a preferred solution of the present invention, the fixed-length memory pool is checked by releasing the fixed-length memory pool so that there is no free memory pool in the current fixed-length memory pool. The space of the entire large memory block of the memory pool is released and added to the corresponding free linked list. The free linked list management of the heap area is used, and each release check is carried out to make the release time timely and ensure the memory utilization rate. Through the free linked list management, the released fixed memory blocks are specially managed, the frequency of heap area allocation is reduced, and the heap area is merged into large memory blocks, further improving the allocation efficiency of the heap area.

[0033] Preferably, the memory management method for reducing memory fragmentation of the present invention allocates the second memory block from the heap area to the cache area, specifically comprising the following steps:

[0034] Check whether the head node of the free linked list is empty. If the head node is not empty, directly return the free memory block to the cache area; if the head node is empty, allocate a second memory block from the variable-length memory pool and return the address of the second memory block.

[0035] As a preferred solution of the present invention, by checking whether there are free memory blocks in the heap area and judging by searching the free linked list, it is possible to avoid splitting a larger second memory block when there are free memory blocks in the heap area, and then by allocating the matching request memory of the heap area and the cache area, the number of heap area splits is further reduced, and the allocation of free memory blocks can be completed faster, thereby further improving the efficiency of allocation.

[0036] In summary, due to the adoption of the above technical solution, the beneficial effects of the present invention are:

[0037] 1. By building a fixed-length memory pool cache area corresponding to the memory block type, we avoid allocating memory directly from the heap area. Correspondingly, the heap area allocation adopts variable-length memory pool management, combining the variable-length memory pool of the heap area and the fixed-length memory pool of the cache area to reduce the frequency of heap memory block cutting and reduce memory fragmentation.

[0038] 2. In the process of querying and obtaining requested memory, a fixed-length memory pool linked list is declared in the cache area to match and obtain memory blocks. Compared with searching and obtaining requested memory in a variable-length memory pool, the query and acquisition efficiency is higher, the memory block acquisition speed is faster, and the memory allocation efficiency is higher. BRIEF DESCRIPTION OF THE DRAWINGS

[0039] Figure 1 It is a schematic diagram of the process of initializing the heap area and the cache area of ​​the present invention;

[0040] Figure 2 It is a data structure diagram of the fixed-length memory pool buffer area of ​​the present invention;

[0041] Figure 3It is a schematic diagram of the memory allocation process of the present invention;

[0042] Figure 4 It is a flow chart of memory release of the present invention. DETAILED DESCRIPTION

[0043] The present invention is described in detail below.

[0044] In order to make the purpose, technical solutions and advantages of the present invention more clearly understood, the present invention is further described in detail in the following examples. It should be understood that the specific embodiments described herein are only used to explain the present invention and are not intended to limit the present invention.

[0045] Example 1:

[0046] refer to Figure 1-Figure 3 As shown, this embodiment provides a memory management method for reducing memory fragmentation, including the following steps:

[0047] S1. Heap area initialization: Initialize the memory of the heap area to a variable-length memory pool; create a free linked list of the variable-length memory pool of the cache area; the free linked list of the cache area is an empty node linked list;

[0048] S2, cache area initialization: S21, divide a plurality of first memory blocks from the heap area to form a cache area, and create a linked list array corresponding to the first memory block of the cache area; S22, create a fixed-length memory pool linked list corresponding to each type of first memory block of the cache area according to the capacity type of the first memory block of the cache area; the fixed-length memory pool linked list of the cache area is an empty node linked list; S23, set the fixed-length memory pool linked list of the cache area in the cache area linked list array in order from small to large according to the capacity of the corresponding first memory block of the cache area, so that each array element of the cache area linked list array represents a first memory block of the cache area, and then declare a fixed-length memory pool in the cache area, and construct the data structure of the cache area; specifically, after the cache area is initialized, the data structure of the fixed-length memory pool can be created as follows Figure 2 As shown, the cache linked list array can be created as an array with a length of 72, and the array elements are fixed-length memory pool linked lists; the cache initialization can be specifically as follows: initialization declaration to build the linked list array → fixed-length memory pool linked list → declaration of fixed-length memory pool → data structure of memory block, to achieve a one-to-one correspondence between the linked list array and the memory block of the fixed-length memory pool cache; for example, linked list array subscript 0 element → 2KB fixed-length memory pool linked list → 2KB fixed-length memory pool → 2KB memory block, that is, subscript 0 → 2KB memory block.

[0049] S3, memory allocation:

[0050] S31. Based on the size of the requested memory, query the cache to see whether there is a fixed-length memory pool linked list that matches the size of the requested memory in the cache.

[0051] S311. If a matching fixed-length memory pool linked list is found, the first node of the cache fixed-length memory pool linked list is obtained from the cache, and the obtained fixed-length memory pool is returned; the cache fixed-length memory pool includes a pointer to a doubly linked list of free memory blocks;

[0052] S312: If no matching fixed-length memory pool linked list is found, allocating a second memory block from the cache heap to the cache; initializing the second memory block of the cache as a fixed-length memory pool; initializing a cache free list, and constructing a cache fixed-length memory pool linked list; and adding the cache fixed-length memory pool to the cache fixed-length memory pool linked list.

[0053] It should be noted that step S312 in this embodiment includes allocation of the second memory block in the heap area, creation of nodes of the fixed-length memory pool linked list, and creation of the fixed-length memory pool linked list.

[0054] S32. Check whether there are free memory blocks in the bidirectional linked list of the cache area; S33. If there are no free memory blocks in the cache area, return to execute the S312 step; specifically, the S312 of the present invention specifically includes the following steps: construct the fixed-length memory pool of the cache area into a node object of the fixed-length memory pool linked list of the cache area, and declare the next pointer and the prev pointer; point the cache area next pointer to the head node of the fixed-length memory pool linked list; point the cache area prev pointer to the node of the next fixed-length memory pool.

[0055] S34. If there is a free memory block in the cache area, a fixed-length memory pool is allocated to respond to the user's request for memory.

[0056] It should be noted that the cache initialization can be understood as the initialization settings for the definition, declaration, and assignment of variables, objects, or data structures. It should also be noted that the heap area is all memory space managed by memory, including divided cache areas, non-fixed allocated memory blocks, and unallocated memory space; the cache area is understood as the fixed memory blocks used by the fixed-length memory pool, and only the memory space used by the long memory pool is specified. The cache area is part of the memory heap.

[0057] It should be noted that the fixed-length or indefinite-length memory pool includes a memory block management header node and memory that can be read and written by users. The memory management header node includes the starting address of the memory pool, the total size of the memory pool, a pointer to a doubly linked list of free memory blocks, a pointer to a doubly linked list of memory blocks, and a free list; the free list is only used to manage fixed-size released unallocated memory blocks, that is, memory blocks released by the buffer; the structure of the fixed-length memory pool includes a management header and memory that can be read and written by users. The area available to users is understood to be divided into memory blocks of the same size according to the memory block size of the fixed-length memory pool list; the management header includes the starting address of the memory pool, the total size of the memory pool, a pointer to a doubly linked list of free memory blocks, and prev pointers pointing to the previous next and next nodes of the fixed-length memory list respectively; the next pointer is understood to be the next node in the linked list used to point to the current node in the linked list. The prev pointer is relative to the next pointer and is used to point to the previous node of the current node in the linked list. For example, if there is a node p, then the next pointer of node P is a pointer to the node immediately following p.

[0058] Specifically, S31 described in the present invention specifically includes the following steps: traversing the cache area linked list array, searching for the memory block corresponding to the subscript of the cache area linked list array, and obtaining the matching cache area fixed-length memory pool linked list from the cache area linked list array through the cache area subscript.

[0059] Specifically, S33 described in the present invention also includes the following steps: when there are no free memory blocks in the cache area bidirectional linked list, the next pointer and prev pointer of the cache area fixed-length memory pool are both set to null pointers, thereby separating the cache area bidirectional linked list without free memory blocks from the cache area fixed-length memory pool linked list.

[0060] Specifically, allocating a second memory block from the cache heap area to the cache area specifically includes the following steps: checking whether the head node of the cache free list is empty; if the cache head node is not empty, directly returning the cache free memory block to the cache cache area; if the cache head node is empty, allocating a second memory block from the cache indefinite-length memory pool, and returning the address of the second memory block in the cache area.

[0061] It should be noted that the "first" and "second" in the first memory block and the second memory block are only for the convenience of clear description and no specific numerical interpretation is given; in the present invention, the first memory block is understood to be a memory block of a fixed size configured by the system, and the capacity is understood to be the size of the first memory block, for example, the system configured memory block size is 2KB, 4KB, 6KB, 8KB... etc., a memory block of fixed size and the same number as the length of the linked list array; the second memory block is understood to be a larger memory divided from the heap area, for example, a large memory block with a capacity of 4096KB.

[0062] In the present invention, the linked list is understood as a non-continuous and non-sequential storage structure on a physical storage unit. The logical order of data elements is realized by the pointer link order in the linked list. The linked list nodes can be allocated at any location in the memory and connected through pointers. The array is understood as a continuous and sequential storage structure on a physical storage unit; several elements of the same type are organized in an ordered form, and the elements in the array are stored together continuously in the memory in this order, and the order of the elements is determined by the position or subscript of the element in the array; the subscript is understood as an integer index of a specific element in the array, which is used to identify the position of each element in the array; the linked list array is understood as the element type; the memory is understood as a component in the computer used to temporarily store calculation data in the CPU and data exchanged with external storage devices such as hard disks; the heap area is understood as an area used for dynamic memory allocation in the memory model; the fixed-length memory pool is understood as a memory allocation technology that allocates and releases fixed-size memory blocks, and each time a fixed-size memory is allocated, no memory fragmentation is generated; the variable-length memory pool is understood as a memory management technology that allows dynamic allocation of memory blocks of different sizes to meet the needs of various data structures and objects; the memory block is understood as a continuous memory space for storing data or instructions; the free memory block is understood as a memory block that does not store data or instructions.

[0063] Specifically, in order to further allocate more memory blocks, the memory management method for reducing memory fragmentation according to the present invention further includes the following steps:

[0064] S4. Release the memory block: S41. Check whether the address and memory block capacity of the cache memory block of the cache area belong to the fixed-length memory pool; clean up the business data of the third memory block that does not belong to the fixed-length memory pool; S42. Add the third memory block to the cache area doubly linked list, so that the cache area doubly linked list can manage the cache area third memory block; S43. Check the cache area free list and the memory space of the fixed-length memory pool; S44. If the cache area third memory block and the cache area memory space are not in use, add the cache area third memory block to the free list of the heap area.

[0065] The above description is only a preferred embodiment of the present invention and is not intended to limit the present invention. Any modifications, equivalent substitutions and improvements made within the spirit and principles of the present invention should be included in the scope of protection of the present invention.

Claims

1. A memory management method for reducing memory fragmentation, characterized in that: The following steps are involved: S1, heap area initialization: initialize the memory of the heap area to a variable-length memory pool; create a free linked list of the variable-length memory pool; the free linked list is an empty node linked list; S2. Cache initialization: S21, allocating a plurality of first memory blocks from the heap area to form a cache area, and creating a linked list array corresponding to the first memory blocks; S22. Creating a fixed-length memory pool linked list corresponding to each type of the first memory block according to the capacity type of the first memory block; the fixed-length memory pool linked list is an empty node linked list; S23, placing the fixed-length memory pool linked list in the linked list array in ascending order of capacity of the corresponding first memory blocks, so that each array element of the linked list array represents a first memory block, and then declaring a fixed-length memory pool in the buffer area, and constructing a data structure of the buffer area; S3, memory allocation: S31. According to the size of the requested memory, query in the cache whether there is a fixed-length memory pool linked list that matches the size of the requested memory; S311. If a matching fixed-length memory pool linked list is found, obtain the first node of the fixed-length memory pool linked list from the cache area, and return the obtained fixed-length memory pool; the fixed-length memory pool includes a pointer to a doubly linked list of free memory blocks; S312: If no matching fixed-length memory pool linked list is found, allocating a second memory block from the heap area to the cache area; initializing the second memory block as a fixed-length memory pool; initializing the free linked list, constructing the fixed-length memory pool linked list; and adding the fixed-length memory pool to the fixed-length memory pool linked list. S32, checking whether there is a free memory block in the bidirectional linked list; S33. If the free memory block does not exist, return to execute step S312; S34. If the free memory block exists, a fixed-length memory pool is allocated to respond to the user's request for memory.

2. The memory management method for reducing memory fragmentation according to claim 1, characterized in that: The S312 specifically includes the following steps: constructing the fixed-length memory pool into a node object of the fixed-length memory pool linked list, and declaring a next pointer and a prev pointer; pointing the next pointer to the head node of the fixed-length memory pool linked list; and pointing the prev pointer to the next node of the fixed-length memory pool.

3. The memory management method for reducing memory fragmentation according to claim 1, wherein: The S31 specifically includes the following steps: traversing the linked list array, searching for the memory block corresponding to the subscript of the linked list array, and obtaining the matching fixed-length memory pool linked list from the linked list array through the subscript.

4. The memory management method for reducing memory fragmentation according to claim 1, wherein: The S33 specifically also includes the following steps: when there is no free memory block in the bidirectional linked list, the next pointer and prev pointer of the fixed-length memory pool are both set to null pointers, thereby separating the bidirectional linked list without free memory blocks from the fixed-length memory pool linked list.

5. The memory management method for reducing memory fragmentation according to any one of claims 1 to 4, characterized in that: The following steps are also included: S4. Release the memory block: S41, checking whether the address and capacity of the memory block in the cache area belong to the fixed-length memory pool; clearing business data of the third memory block that does not belong to the fixed-length memory pool; S42: adding the third memory block to the bidirectional linked list, thereby enabling the bidirectional linked list to manage the third memory block; S43, checking the memory space of the free list and the fixed-length memory pool; S44: If the third memory block and the memory space are not in use, add the third memory block to a free linked list in the heap area.

6. The memory management method for reducing memory fragmentation according to any one of claims 1 to 4, characterized in that: Allocating a second memory block from the heap area to the cache area specifically includes the following steps: Check whether the head node of the free linked list is empty. If the head node is not empty, directly return the free memory block to the cache area; if the head node is empty, allocate a second memory block from the variable-length memory pool and return the address of the second memory block.

Citation Information

Patent Citations

  • An Embedded Software Memory Management Method

    CN108038002B

  • Memory control method for embedded systems

    CN102915276A

  • Method of managing memory allocation of heap space

    CN106855788A