From d8dcc0517485a07520513baf556dcfabb5824ba2 Mon Sep 17 00:00:00 2001 From: wdfk-prog <1425075683@qq.com> Date: Thu, 18 Apr 2024 21:58:09 +0800 Subject: [PATCH] [mem] Remove useless code And Update mem documentation --- documentation/memory/figures/08smem_work4.png | Bin 0 -> 52729 bytes documentation/memory/memory.md | 24 +++++++++++++++++- examples/utest/testcases/kernel/mem_tc.c | 3 --- src/mem.c | 5 ---- 4 files changed, 23 insertions(+), 9 deletions(-) create mode 100644 documentation/memory/figures/08smem_work4.png diff --git a/documentation/memory/figures/08smem_work4.png b/documentation/memory/figures/08smem_work4.png new file mode 100644 index 0000000000000000000000000000000000000000..92544169d0328f49a1d2753f1ad54f817b37f4c5 GIT binary patch literal 52729 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 Qc;HWWqrrxBEt`}73)|}1=Kufz literal 0 HcmV?d00001 diff --git a/documentation/memory/memory.md b/documentation/memory/memory.md index 892107fd751..2ac9fe30efb 100644 --- a/documentation/memory/memory.md +++ b/documentation/memory/memory.md @@ -43,7 +43,13 @@ Any or none of these memory heap management algorithms can be chosen when the sy ### Small Memory Management Algorithm -The small memory management algorithm is a simple memory allocation algorithm. Initially, it is a large piece of memory. When a memory block needs to be allocated, the matching memory block is segmented from the large memory block, and then this matching free memory block is returned to the heap management system. Each memory block contains data head for management use through which the used block and the free block are linked by a doubly linked list, as shown in the following figure: +The small memory management algorithm is a simple memory allocation algorithm. Initially, it is a large piece of memory. When a memory block needs to be allocated, the matching memory block is segmented from the large memory block, and then this matching free memory block is returned to the heap management system. Each memory block contains data head for management use through which the used block and the free block are linked by a doubly linked list. + + + +**Use this implementation before 4.1.0** + +As shown in the following figure: ![Small Memory Management Working Mechanism Diagram](figures/08smem_work.png) @@ -55,6 +61,22 @@ Each memory block (whether it is an allocated memory block or a free memory bloc The performance of memory management is mainly reflected in the allocation and release of memory. The small memory management algorithm can be embodied by the following examples. + + +**4.1.0 and later use this implementation** + +As shown in the following figure: + +![](figures/08smem_work4.png) + +**Heap Start**: The heap head address stores memory usage information, the heap head address pointer, the heap end address pointer, the minimum heap free address pointer, and the memory size. + +Each memory block (whether it is an allocated memory block or a free memory block) contains a data head, including: + +**pool_ptr**: Small memory object address. If the last bit of the memory block is 1, it is used. If the last bit of the memory block is 0, it is not used. When used, the structure members of the small memory algorithm can be quickly obtained by calc. + + + As shown in the following figure, the free list pointer lfree initially points to a 32-byte block of memory. When the user thread wants to allocate a 64-byte memory block, since the memory block pointed to by this lfree pointer is only 32 bytes and does not meet the requirements, the memory manager will continue to search for the next memory block. When the next memory block with 128 bytes is found, it meets the requirements of the allocation. Because this memory block is large, the allocator will split the memory block, and the remaining memory block (52 bytes) will remain in the lfree linked list, as shown in the following table which is after 64 bytes is allocated. ![Small Memory Management Algorithm Linked List Structure Diagram 1](figures/08smem_work2.png) diff --git a/examples/utest/testcases/kernel/mem_tc.c b/examples/utest/testcases/kernel/mem_tc.c index 028876dfa9f..aee9795117f 100644 --- a/examples/utest/testcases/kernel/mem_tc.c +++ b/examples/utest/testcases/kernel/mem_tc.c @@ -15,9 +15,6 @@ struct rt_small_mem_item { rt_ubase_t pool_ptr; /**< small memory object addr */ -#ifdef ARCH_CPU_64BIT - rt_uint32_t resv; -#endif /* ARCH_CPU_64BIT */ rt_size_t next; /**< next free item */ rt_size_t prev; /**< prev free item */ #ifdef RT_USING_MEMTRACE diff --git a/src/mem.c b/src/mem.c index 06c064c0e80..644eeb268c3 100644 --- a/src/mem.c +++ b/src/mem.c @@ -59,9 +59,6 @@ struct rt_small_mem_item { rt_ubase_t pool_ptr; /**< small memory object addr */ -#ifdef ARCH_CPU_64BIT - rt_uint32_t resv; -#endif /* ARCH_CPU_64BIT */ rt_size_t next; /**< next free item */ rt_size_t prev; /**< prev free item */ #ifdef RT_USING_MEMTRACE @@ -85,8 +82,6 @@ struct rt_small_mem rt_size_t mem_size_aligned; /**< aligned memory size */ }; -#define HEAP_MAGIC 0x1ea0 - #define MIN_SIZE (sizeof(rt_ubase_t) + sizeof(rt_size_t) + sizeof(rt_size_t)) #define MEM_MASK ((~(rt_size_t)0) - 1)