<commit_before>---
layout: post
title: SDN控制器代码重构（三）--－ 内存池重构
description: "SDN控制器代码重构（三）--－ 内存池重构"
tags: [SDN]
categories: [SDN]
---

##   背景

memory_pool原来的架构是

```
//内存池结构体
typedef struct _Queue_List      
{
    UINT4       total_len;   //内存池总共的单元个数
    UINT4       usable_len;  //内存池可用的单元个数
    void        *data;	      //内存池数据区
    void        **arr;		  //内存池存储数据区各区块头指针的一个数组(该内存池是向上增长的)
    UINT4       head;		  //内存池数据区头指针索引(该内存池是向上增长的)即当前未使用的区块头指针的索引
    UINT4       tail;
    void        *mutex;
    char        *states;     //防止重复释放,1:没有占用  0:已经占用
    UINT2       block;
}Queue_List;

```

每个交换机都有一个内存池
在配置文件里面写了

```
#switch receive buffer number
buff_num=2000
#every switch receive buffer length
buff_len=20480
```


有时候一个字节就浪费20K大小，就比较的浪费内存，以下是代码的实现


```
//在_q_list中插入data
//与其说是将data插入q_list不如说是将data所占空间还给内存池q_list
static int Queue_In(void *_q_list, void *data)
{
    Queue_List *q_list;
    UINT4   tail;
    int     pos;
    q_list = (Queue_List *)(_q_list);

    if(data == NULL)
    {<commit_msg>modified _config.yml<commit_after>---
layout: post
title: SDN控制器代码重构（三）--－ 内存池重构
description: "SDN控制器代码重构（三）--－ 内存池重构"
tags: [SDN]
categories: [SDN]
---

##   背景

memory_pool原来的架构是

```
//内存池结构体
typedef struct _Queue_List      
{
    UINT4       total_len;   
    //内存池总共的单元个数
    UINT4       usable_len;  
    //内存池可用的单元个数
    void        *data;	      
    //内存池数据区
    void        **arr;		  
    //内存池存储数据区各区块头指针的一个数组(该内存池是向上增长的)
    UINT4       head;		  
    //内存池数据区头指针索引(该内存池是向上增长的)即当前未使用的区块头指针的索引
    UINT4       tail;
    void        *mutex;
    char        *states;     
    //防止重复释放,1:没有占用  0:已经占用
    UINT2       block;
}Queue_List;

```

每个交换机都有一个内存池
在配置文件里面写了

```
#switch receive buffer number
buff_num=2000
#every switch receive buffer length
buff_len=20480
```


有时候一个字节就浪费20K大小，就比较的浪费内存，以下是代码的实现


```
//在_q_list中插入data
//与其说是将data插入q_list不如说是将data所占空间还给内存池q_list
static int Queue_In(void *_q_list, void *data)
{
    Queue_List *q_list;
    UINT4   tail;
    int     pos;
    q_list = (Queue_List *)(_q_list);

    if(data == NULL)
    {
{'fraction_non_alphanumeric': 0.11358144030932818, 'fraction_numerical': 0.01836636056065732, 'mean_word_length': 2.490725126475548, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2482971', 'n_tokens_mistral': 1102, 'n_tokens_neox': 1206, 'n_words': 157}