2. VPP源码分析(内存管理之抽象数据结构)

简介: 1.2. 抽象数据结构 1.2.1. vector CLIB vectors are ubiquitous dynamically resized arrays with by user defined "headers".

1.2. 抽象数据结构

1.2.1. vector

7
CLIB vectors are ubiquitous dynamically resized arrays with by user defined "headers".
Many CLIB data structures (e.g. hash, heap, pool) are vectors with various different headers.

The memory layout looks like this:

                  user header (aligned to uword boundary)
                  vector length: number of elements
 user's pointer-> vector element #0
                  vector element #1
                  ...

vector结构经常和user定义的header结合
8

Many macros have _a variants supporting alignment of vector data and _h variants supporting non zero length vector headers.
The _ha variants support both
9
10

1.2.2. bitmap

Set and get bits with indexes.Lots of them. Implemented as a uword vector.
typedef uword clib_bitmap_t;
12

uword *bitmap = 0;
clib_bitmap_alloc(bitmap, 100);     //Allocate bitmap for 100 bits
clib_bitmap_validate(bitmap, 200); //Make room for 201 bits
clib_bitmap_set(bitmap, 33, 1);
clib_bitmap_get(bitmap, 33);

uword a = clib_bitmap_get_multiple(bitmap, 3, 10); //Get bits from 3 to 12 included
uword clib_bitmap_first_set(uword *ai);
uword clib_bitmap_first_clear(uword *ai);
uword clib_bitmap_next_set(uword *ai, uword i);
uword clib_bitmap_next_clear(uword *ai, uword i);
uword clib_bitmap_count_set_bits(uword *ai);

1.2.3. pool

Fixed sized element allocator. Based on a vec and a bitmap.
12

  • free_bitmap:Bitmap of indices of free objects.
  • free_indices:Vector of free indices. One element for each set bit in bitmap.

The following fields are set for fixed-size, preallocated pools

  • max_elts:Maximum size of the pool, in elements
  • mmap_base, mmap_size:mmap segment info: base + length
    13
T *pool = 0;
T *e;
pool_get(pool, e);
//pool_get_aligned(pool, e, 4);

//Query if element is free
pool_is_free(pool,e);
pool_is_free_index(pool, e – pool);

//Unalloc element
pool_put(pool,e);

//Free the whole pool
pool_free(pool);

// Allocated element count
pool_elts(pool);

1.2.4. heap

Variable element size allocator. 和pool类似只不过pool中的每个元素是定长的而heap中的元素是变长的。
pool和heap是建立在vec和bitmap上的两种高级数据结构,而mheap是实现这些数据结构的最基础的内存管理单元,这里不要混淆了。

  • elts:Vector of used and free elements.
  • small_free_elt_free_index:For elt_bytes < sizeof (u32) we need some extra space per elt to store free list index.
  • free_elts:Vector of free indices of elts array.
  • free_lists:Indices of free elts indexed by size bin.
  • used_elt_bitmap:Used for validattion/debugging.
  • head, tail:First and last element of doubly linked chain of elements.
  • elt_bytes:Number of bytes in a help element.
T *heap = 0;
T *e;

//Allocate 4xT.
U32 handle;
u32 offset = heap_alloc(heap, 4, handle);

//Allocated heap[offset] – heap[offset + 4]
//Object size
heap_size(heap, handle);

//Deallocate
heap_dealloc(heap, handle);

Rarely used (pools are faster). Still efficient.
To be used if you need variably sized allocations.
e.g. classifier

1.3. 内存管理的目的

提高cache命中率!!!
14

目录
相关文章
|
6月前
|
编译器 程序员 测试技术
详解动态内存管理【malloc/calloc/realloc/free函数/柔性数组】【C语言/进阶/数据结构基础】
详解动态内存管理【malloc/calloc/realloc/free函数/柔性数组】【C语言/进阶/数据结构基础】
172 0
|
2月前
|
存储 API
milvus insert api的数据结构源码分析
milvus insert api的数据结构源码分析
824 6
milvus insert api的数据结构源码分析
|
3月前
|
存储 缓存 NoSQL
Redis 数据结构+线程模型+持久化+内存淘汰+分布式
Redis 数据结构+线程模型+持久化+内存淘汰+分布式
311 0
|
4月前
|
存储 NoSQL Java
基于内存的分布式NoSQL数据库Redis(二)数据结构与通用命令
基于内存的分布式NoSQL数据库Redis(二)数据结构与通用命令
183 0
|
10月前
|
NoSQL Shell Redis
Redis内存友好的数据结构设计
Redis内存友好的数据结构设计
68 0
|
11月前
|
索引
数组是内存的实现及栈和队列的数据结构
数组是内存的实现及栈和队列的数据结构
59 0
数组是内存的实现及栈和队列的数据结构
|
11月前
|
Java C++
Java Review - 线程池中使用ThreadLocal不当导致的内存泄漏案例&源码分析
Java Review - 线程池中使用ThreadLocal不当导致的内存泄漏案例&源码分析
89 0
|
存储 算法 C++
数据结构——内存(RAM)
在计算机硬件上我们学习了内存的概念,那在软件上是如何实现存储的呢?数据结构很多时候都和内存有关,不理解对后面很多的概念会很模糊。笔者写的文章将陪伴各位数据结构的学习。不存在先后的关系,不拘泥于语言,希望各位可以拓展出更多的内容,后面会考虑出算法,继续加油,越来越强。
790 0
数据结构——内存(RAM)
|
缓存 算法 Java
全网最硬核 Java 新内存模型解析与实验 - 5. JVM 底层内存屏障源码分析
全网最硬核 Java 新内存模型解析与实验 - 5. JVM 底层内存屏障源码分析
全网最硬核 Java 新内存模型解析与实验 - 5. JVM 底层内存屏障源码分析
|
存储 算法 Java
《恋上数据结构第1季》哈希表介绍以及从源码分析哈希值计算
《恋上数据结构第1季》哈希表介绍以及从源码分析哈希值计算
105 0
《恋上数据结构第1季》哈希表介绍以及从源码分析哈希值计算