x memory pool c语言 内存池】的更多相关文章

#ifndef X_MEMORY_H #define X_MEMORY_H #include <stdlib.h> #include <stdio.h> #include <memory.h> typedef enum { ErrorUnknown, NoError, ErrorInit, //无法申请系统内存 ErrorOverBlockSize //超过默认块大小 }XMemErrorCode; #ifdef __cplusplus extern "C&q…
内存池可有效降低动态申请内存的次数,减少与内核态的交互,提升系统性能,减少内存碎片,增加内存空间使用率,避免内存泄漏的可能性,这么多的优点,没有理由不在系统中使用该技术. 内存池分类: 1.              不定长内存池.典型的实现有apr_pool.obstack.优点是不需要为不同的数据类型创建不同的内存池,缺点是造成分配出的内存不能回收到池中.这是由于这种方案以session为粒度,以业务处理的层次性为设计基础. 2.             定长内存池.典型的实现有LOKI.B…
本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 内存池是用于预先申请一些内存用于备用,当系统内存不足无法从伙伴系统和slab中获取内存时,会从内存池中获取预留的那些内存.内存池与特殊slab一样,需要使用的设备需要自己创建内存池,而不是系统会自动生成.书上形容得好,内存比作新鲜食物,内存池比作罐头食物,人比作拥有此内存池的模块,当无法吃到新鲜食物时,就需要打开罐头吃罐头食物. 一般情况下,内存池建立在slab之上,也就是说池子里存放的是slab对象,当某个…
建议看本文档时结合nginx源代码. 1.1   什么是内存池?为什么要引入内存池? 内存池实质上是接替OS进行内存管理.应用程序申请内存时不再与OS打交道.而是从内存池中申请内存或者释放内存到内存池.因此.内存池在实现的过程中,必定有一部分操作时从OS中申请内存.或者释放内存到OS.例如以下图所看到的: 图1 内存池的引入可有效解决两个问题: (1) 减少应用程序与OS之间进行频繁内存和释放的系统调用,进而减少程序执行期间在两个空间的切换,提升了程序执行效率: (2)内存池可依据应用特性组织内…
基本结构 1. ngx_pool_t struct ngx_pool_s { ngx_pool_data_t d; size_t max; ngx_pool_t *current; ngx_chain_t *chain; ngx_pool_large_t *large; ngx_pool_cleanup_t *cleanup; ngx_log_t *log; }; 提供的函数 1. ngx_create_pool(): 分配并初始化一块 size 大小的内存池 ngx_pool_t *ngx_c…
内存池的目的就是管理内存,使回收内存可以自动化一些. ngx_palloc.h /* * Copyright (C) Igor Sysoev * Copyright (C) Nginx, Inc. */ #ifndef _NGX_PALLOC_H_INCLUDED_ #define _NGX_PALLOC_H_INCLUDED_ #include <ngx_config.h> #include <ngx_core.h> // 内存池界定小内存与大内存的边界值的最大值. /* * N…
Python是如何进行内存管理-内存池机制 Pymalloc Python引用了一个内存池(memory pool)机制,即Pymalloc机制(malloc:n.分配内存),用于对小块内存的申请和释放管理 内存池(memory pool)的概念: 当创建大量消耗小内存的对象时,频繁调用new/malloc会导致大量的内存碎片,致使效率降低.内存池的概念就是预先在内存中申请一定数量的,大小相等的内存块留作备用,当有新的内存需求时,就先从内存池中分配内存给这个需求,不够了之后再申请新的内存.这样做…
内存池优势: 效率高,频繁的new和delete效率低下 减少内存碎片,反复向系统申请和释放内存会产生大量内存碎片 防止内存泄露 内存池设计思路: 内存池可以根据实际需要,设计成不同的样子.下面是针对网络中数据传输设计的一个内存池. 内存池:在初始状态获取的堆区一大块内存. 内存页:根据需要,将内存池划分成若干内存页,进行管理. 内存块:内存页内的内存最小单元,用于直接传递给申请者使用. 由于网络传输数据大小有限制,但又不统一,且内存占用时间短,发送前申请,发送完毕释放,所以可以初步把内存池划分…
转自:http://blog.chinaunix.net/uid-28458801-id-4254501.html 操作系统:ubuntu10.04 前言:     在通信过程中,无法知道将会接收到的数据的长度,因此开一个固定大小的缓冲区并不合适,开大了,很可能大多数通信都只是几十个自己而已:开小了,又无法处理大数据.因此最好的方法就是创建内存池,根据实际情况,分配合适大小的内存空间. 一,思路 通过双向链表,管理所有的内存池. 二,实现     1,内存池的相关信息结构体 点击(此处)折叠或打…
C语言可以使用alloc从栈上动态分配内存. 内存碎片 Malloc/free或者new/delete大量使用会造成内存碎片,这种碎片形成的机理如下: 内存碎片一般是由于空闲的内存空间比要连续申请的空间小,导致这些小内存块不能被充分的利用,举个例子: 如果有100个单位的连续空闲内存,那么先申请3单元的连续内存,再申请50单元的内存,这时释放一开始的3单元的内存.这时,如果你一直申请比三单元大的内存单元,那么开始的那连续的三单元就一直不能被使用. 一个简单的内存池的写法: struct memb…