??xml version="1.0" encoding="utf-8" standalone="yes"?>久久永久免费,亚洲国产天堂久久国产91,伊人久久亚洲影院http://www.shnenglu.com/jaxe/category/11789.htmlFreeBSD、Linux下高性能|络游戏服务器开?-武功高也怕菜刀zh-cnTue, 06 Jul 2010 03:47:42 GMTTue, 06 Jul 2010 03:47:42 GMT60Boost.Program_options中的一个函数式~程的例?/title><link>http://www.shnenglu.com/jaxe/archive/2010/07/05/119385.html</link><dc:creator>毛</dc:creator><author>毛</author><pubDate>Mon, 05 Jul 2010 15:08:00 GMT</pubDate><guid>http://www.shnenglu.com/jaxe/archive/2010/07/05/119385.html</guid><wfw:comment>http://www.shnenglu.com/jaxe/comments/119385.html</wfw:comment><comments>http://www.shnenglu.com/jaxe/archive/2010/07/05/119385.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/jaxe/comments/commentRss/119385.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/jaxe/services/trackbacks/119385.html</trackback:ping><description><![CDATA[    boost里的program_options提供E序员一U方便的命o行和配置文gq行E序选项讄的方法?br>    其文例子中有如下代码:<br>    <div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><span style="COLOR: #008080">1</span> <span style="COLOR: #0000ff">using</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000"> boost::program_options;<br></span><span style="COLOR: #008080">2</span> <span style="COLOR: #000000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">声明需要的选项</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">3</span> <span style="COLOR: #008000"></span><span style="COLOR: #000000">options_description desc(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Allowed options</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">4</span> <span style="COLOR: #000000">desc.add_options()<br></span><span style="COLOR: #008080">5</span> <span style="COLOR: #000000">        (</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">help,h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">produce help message</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">6</span> <span style="COLOR: #000000">        (</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">person,p</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, value</span><span style="COLOR: #000000"><</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">></span><span style="COLOR: #000000">()</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">default_value(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">world</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">), </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">who</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);</span></div> <br>    看第4?行,是不是感觉很怪?q种方式体现了函数式~程中最大的特点Q函数是一cd|引用资料来说,<em>所?#8220;函数是一cd|First Class ValueQ?#8221;指的是函数和值是同等的概念,一个函数可以作为另外一个函数的参数Q也可以作ؓg用。如果函数可以作Zcdg用,那么我们可以写Z些函敎ͼ使得q些函数接受其它函数作ؓ参数q返回另外一个函数。比如定义了f和g两个函数Q用compose(f,g)的风格就可以生成另外一个函敎ͼ使得q个函数执行f(g(x))的操作,则可Ucompose为高阶函敎ͼHigher-order FunctionQ?br><br></em>    program_options里的q种方式是怎么实现的呢Q通过分析boost的源代码Q我们自己来写个cM的实现看看:<br>     test.h    <div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><span style="COLOR: #008080"> 1</span> <span style="COLOR: #000000">#pragma once<br></span><span style="COLOR: #008080"> 2</span> <span style="COLOR: #000000"><br></span><span style="COLOR: #008080"> 3</span> <span style="COLOR: #000000">#include </span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080"> 4</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000"> std;<br></span><span style="COLOR: #008080"> 5</span> <span style="COLOR: #000000"><br></span><span style="COLOR: #008080"> 6</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Test;<br></span><span style="COLOR: #008080"> 7</span> <span style="COLOR: #000000"><br></span><span style="COLOR: #008080"> 8</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Test_easy_init<br></span><span style="COLOR: #008080"> 9</span> <span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">10</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">11</span> <span style="COLOR: #000000">    Test_easy_init(Test</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> owner):m_owner(owner){}<br></span><span style="COLOR: #008080">12</span> <span style="COLOR: #000000"><br></span><span style="COLOR: #008080">13</span> <span style="COLOR: #000000">    Test_easy_init </span><span style="COLOR: #000000">&</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">operator</span><span style="COLOR: #000000"> () (</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> name);<br></span><span style="COLOR: #008080">14</span> <span style="COLOR: #000000">    Test_easy_init </span><span style="COLOR: #000000">&</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">operator</span><span style="COLOR: #000000"> () (</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> name,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> id);<br></span><span style="COLOR: #008080">15</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">16</span> <span style="COLOR: #000000">    Test</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> m_owner;<br></span><span style="COLOR: #008080">17</span> <span style="COLOR: #000000">};<br></span><span style="COLOR: #008080">18</span> <span style="COLOR: #000000"><br></span><span style="COLOR: #008080">19</span> <span style="COLOR: #000000"><br></span><span style="COLOR: #008080">20</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Test<br></span><span style="COLOR: #008080">21</span> <span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">22</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">23</span> <span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> add(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> name);<br></span><span style="COLOR: #008080">24</span> <span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> add(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> name,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> id);<br></span><span style="COLOR: #008080">25</span> <span style="COLOR: #000000"><br></span><span style="COLOR: #008080">26</span> <span style="COLOR: #000000">    Test_easy_init add_some();<br></span><span style="COLOR: #008080">27</span> <span style="COLOR: #000000"><br></span><span style="COLOR: #008080">28</span> <span style="COLOR: #000000">};</span></div> <br>test.cpp<br> <div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><span style="COLOR: #008080"> 1</span> <span style="COLOR: #000000">#include </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">test.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080"> 2</span> <span style="COLOR: #000000"><br></span><span style="COLOR: #008080"> 3</span> <span style="COLOR: #000000">Test_easy_init </span><span style="COLOR: #000000">&</span><span style="COLOR: #000000"> Test_easy_init::</span><span style="COLOR: #0000ff">operator</span><span style="COLOR: #000000"> () (</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> name,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> id)<br></span><span style="COLOR: #008080"> 4</span> <span style="COLOR: #000000">{<br></span><span style="COLOR: #008080"> 5</span> <span style="COLOR: #000000"><br></span><span style="COLOR: #008080"> 6</span> <span style="COLOR: #000000">    m_owner</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">add(name,id);<br></span><span style="COLOR: #008080"> 7</span> <span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">*</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080"> 8</span> <span style="COLOR: #000000">}<br></span><span style="COLOR: #008080"> 9</span> <span style="COLOR: #000000"><br></span><span style="COLOR: #008080">10</span> <span style="COLOR: #000000"><br></span><span style="COLOR: #008080">11</span> <span style="COLOR: #000000">Test_easy_init </span><span style="COLOR: #000000">&</span><span style="COLOR: #000000"> Test_easy_init::</span><span style="COLOR: #0000ff">operator</span><span style="COLOR: #000000"> () (</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> name)<br></span><span style="COLOR: #008080">12</span> <span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">13</span> <span style="COLOR: #000000"><br></span><span style="COLOR: #008080">14</span> <span style="COLOR: #000000">    m_owner</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">add(name);<br></span><span style="COLOR: #008080">15</span> <span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">*</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">16</span> <span style="COLOR: #000000">}<br></span><span style="COLOR: #008080">17</span> <span style="COLOR: #000000"><br></span><span style="COLOR: #008080">18</span> <span style="COLOR: #000000">Test_easy_init Test::add_some()<br></span><span style="COLOR: #008080">19</span> <span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">20</span> <span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> Test_easy_init(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">21</span> <span style="COLOR: #000000">}<br></span><span style="COLOR: #008080">22</span> <span style="COLOR: #000000"><br></span><span style="COLOR: #008080">23</span> <span style="COLOR: #000000"><br></span><span style="COLOR: #008080">24</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> Test::add(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> name)<br></span><span style="COLOR: #008080">25</span> <span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">26</span> <span style="COLOR: #000000">    cout</span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">add:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000">name</span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000">endl;<br></span><span style="COLOR: #008080">27</span> <span style="COLOR: #000000">}<br></span><span style="COLOR: #008080">28</span> <span style="COLOR: #000000"><br></span><span style="COLOR: #008080">29</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> Test::add(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> name,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> id)<br></span><span style="COLOR: #008080">30</span> <span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">31</span> <span style="COLOR: #000000">    cout</span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">add:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000">name</span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000">id</span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000">endl;<br></span><span style="COLOR: #008080">32</span> <span style="COLOR: #000000">}</span></div> <br>使用方式Q?br> <div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><span style="COLOR: #008080">1</span> <span style="COLOR: #000000">Test t1;<br></span><span style="COLOR: #008080">2</span> <span style="COLOR: #000000"><br></span><span style="COLOR: #008080">3</span> <span style="COLOR: #000000">t1.add_some()<br></span><span style="COLOR: #008080">4</span> <span style="COLOR: #000000">    (</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">hello</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">5</span> <span style="COLOR: #000000">    (</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">no id</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">6</span> <span style="COLOR: #000000">    (</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">hello2</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">);</span></div> <br>是不是很有意思。add_some()Ҏq回一个Test_easy_initcȝ对象QTest_easy_initc重载了操作W?)Q操作符()Ҏq回Test_easy_initcd象自w的引用。? <img src ="http://www.shnenglu.com/jaxe/aggbug/119385.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/jaxe/" target="_blank">毛</a> 2010-07-05 23:08 <a href="http://www.shnenglu.com/jaxe/archive/2010/07/05/119385.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个简单实用的内存池实C?QC实现Q?/title><link>http://www.shnenglu.com/jaxe/archive/2009/09/27/97362.html</link><dc:creator>毛</dc:creator><author>毛</author><pubDate>Sun, 27 Sep 2009 06:50:00 GMT</pubDate><guid>http://www.shnenglu.com/jaxe/archive/2009/09/27/97362.html</guid><wfw:comment>http://www.shnenglu.com/jaxe/comments/97362.html</wfw:comment><comments>http://www.shnenglu.com/jaxe/archive/2009/09/27/97362.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.shnenglu.com/jaxe/comments/commentRss/97362.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/jaxe/services/trackbacks/97362.html</trackback:ping><description><![CDATA[     摘要:     上一内存池的实现其实更像一个后备列表的实现。用上来说不是很方便,要申L内存块是一个BLOCKl构的一个个成员Q而且每次从系l内存堆中申请都是一块一块Q也没有考虑字节寚w。因此让我们来看看新的一个内存池的实现吧?nbsp;   q个内存池是Ҏ《c++应用E序性能优化》书里的固定寸的内存池原理做了一些改动用C语言写的。大家有兴趣...  <a href='http://www.shnenglu.com/jaxe/archive/2009/09/27/97362.html'>阅读全文</a><img src ="http://www.shnenglu.com/jaxe/aggbug/97362.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/jaxe/" target="_blank">毛</a> 2009-09-27 14:50 <a href="http://www.shnenglu.com/jaxe/archive/2009/09/27/97362.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个简单实用的内存池之一Qc实现)http://www.shnenglu.com/jaxe/archive/2009/09/17/96581.htmlThu, 17 Sep 2009 14:34:00 GMThttp://www.shnenglu.com/jaxe/archive/2009/09/17/96581.htmlhttp://www.shnenglu.com/jaxe/comments/96581.htmlhttp://www.shnenglu.com/jaxe/archive/2009/09/17/96581.html#Feedback17http://www.shnenglu.com/jaxe/comments/commentRss/96581.htmlhttp://www.shnenglu.com/jaxe/services/trackbacks/96581.html
     做过一个简单的试Q?0万次内存池调用的效率大概比直接分配释攑ֆ存提高了30-50%。但是前提是内存池不能加锁(pthread_mutexQ,加锁的内存池效率和直接分配内存的效率差不多,有时候还要多点点。(试的环境是每次2KQ?个双核CPUQFREEBSD7Q?br>
代码实现Q?br>
struct memblock
{
   
int              used;
   
void*            data;
   
struct memblock* next;
   
struct memblock* createnext;
}
;


struct mempool
{
    
int            size;//memblock大小
    int            unused;//I闲的memblock大小
    int            datasize;//每次分配的数据大?是memblock.data)
    struct memblock*    free_linkhead;//I闲memblock链表?/span>
    struct memblock*    create_linkhead;//所有创建的memblock链表_内存池释攄时候用,防止内存池释攄gq有memblock未归q的情况
    
};
typedef 
void (*free_callback)(void*);//释放回调函数Q释放membloc.data用,可以单的直接用free函数

void    mempool_init(int initialSize,int datasize);//初始化mempool
void    mempool_dealloc(struct mempool* pool,free_callback callback);//释放mempool
void*    mempool_get(struct mempool* pool);//获取一个memblock
void    mempool_release(struct mempool* pool,struct memblock* block);//归还一个memblock

/*********************************
 * mempool
 * *****************************
*/
//malloc一个memblock
static struct memblock* mempool_allocblock( struct mempool* pool );

//------------------implement--------
void*
mempool_init( 
int initialSize, int datasize )
{
    
struct mempool* pool = malloc( sizeofstruct mempool ) );
    pool
->unused = 0;
    pool
->datasize = datasize;
    pool
->free_linkhead = NULL;
  
    
//预先初始化initialSize个内存块
     pool->create_linkhead = NULL;
    
int i;
    
for ( i = 0; i < initialSize; i++ ) {
        
struct memblock* block = mempool_allocblock( pool );
        mempool_release( pool, block );
    }
    
return ( pool );
}

void
mempool_dealloc( 
struct mempool* pool, free_callback callback )
{
    
struct memblock* block = NULL;
    
//所有创建的memblock释放?/span>
    while ( pool->create_linkhead != NULL ) {
        block 
= pool->create_linkhead;
        pool
->create_linkhead = pool->create_linkhead->createnext;
    
//执行free回调?/span>
        if ( callback ) {
            ( 
*callback )( block->data );
        }
        free( block );
    }
    free( pool );
    L_DEBUG( 
"%s:size(%d),unused(%d)", __func__, pool->size, pool->unused );
}

static struct memblock*
mempool_allocblock( 
struct mempool* pool )
{
    
struct memblock* block = malloc( sizeofstruct memblock ) );
    block
->data = malloc( sizeof( pool->datasize ) );
    block
->next = NULL;
    block
->used = 1;//表示已?br>
    
//加入所有创建的memblock的链表头
    block->createnext = pool->create_linkhead;
    pool
->create_linkhead = block;

    pool
->size++;
    
return ( block );
}

void
mempool_release( 
struct mempool* pool, struct memblock* block )
{
    
if ( block == NULL ) {
        L_WARN( 
"%s:release a NULL!", __func__ );
        
return;
    }
    
if ( block->used != 1 ) {
        L_WARN( 
"%s:used!=1", __func__ );
        
return;
    }
    
//归q的内存块放到空闲链表头?/span>
    block->used = 0;//表示I闲
    block->next = pool->free_linkhead;
    pool
->free_linkhead = block;
    pool
->unused++;//I闲?1
}

void*
mempool_get( 
struct mempool* pool )
{
   
    
struct memblock* block = NULL;
    
if ( pool->free_linkhead ) {
    
//从空闲链表头取出一个内存块
        block = pool->free_linkhead;
        pool
->free_linkhead = pool->free_linkhead->next;
        block
->next = NULL;
        block
->used = 1;//表示已?/span>
        pool->unused--;//I闲内存块数-1
    }
    
else {
    
//没有I闲的内存块Q创Z?/span>
        block = mempool_allocblock( pool );
    }
    
return ( block );
}


2009-09-17 22:34 发表评论
]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            99|һ| ޹Ʒý߹ۿ | ƷëƬvaһ | 99Ƶ| ŷպƵ| һɫþۺ޾Ʒ| պƵĻ| Ʒ| ŮƷվ| ŷպɫվһ| ҹӰ߹ۿ| ŷbt| ޼| պ޲| պƷ߹ۿ| ŷ123| ŷƵ36p| þþۺϼ| ŷƷ| ŷһžž| þۺϾþþ| ŷ| þþþùƷ| һպŷƷ| 㽶þҹɫƷ| ۵Ӱ| ŷ| ŷwww| ŷ ŷ պƵ| ҹƷþþþþ99| ۺ| ŷ͵ҹƵ| ŷɫһ| 鶹Ʒվ| Ů˾ƷƵ| ޾Ʒþ99| Ʒ1234| ˵| Ůɫ| ƷƵ| þþþùƷ| Ʒchinese| ޹ŷպ| ѹۿһ| ŷ| Ļ| ŷպƵ| ޹aƵ| ÿav߲ۿ| ŷһ| һպ| Ʒjizz߹ۿ| ŷ޾Ʒһ | Ʒһ| ޹ᆱƷԲ߹ۿ| ھþۺ| ŷר߹ۿ| þþ뾫ƷպĦ| Ʒϡȱϵ| 99ƷȾþ91͹| 99ѾƷ߹ۿ| ŷƷ޾Ʒ| Ůav߲| պۺ| ŷպѸ| ëƬ| ҹƷƵһ| Ʒѿþþ㽶| һƵ߹ۿ| һ߲| Ʒþþþþav | Ʒҿ| ŷһ| ߹ۿƵպ| ÿav߲ۿ| СƵ| ޹Ʒvaڿ| պŷۺ| ŷݺ߿Ѱ| Ƶһ| þþƷ| ޵Ӱ| ŷɫ2015| ۺϼ| ŷ91Ƭ| һ| ߾Ʒ| ŷƵ| ֻɫ| ŷƵ| ҹƵ| 깬һ| ŷƵwwwҹɫԴ| 99ۺ| þݾþ| һ999| ݺɫۺվþþþþþ| ŷҹ77777| һӰȷ| ŷҹ糡ѹۿ| һƵ| ŷ| ŷƷ߹ۿ| ŷƵ| ŷպƷ| ޻ɫƷ| þþѾƷ| һŷ| ޴Ů| ŷһ| ŷ߹ۿ| þavԴվ| ŮŮŮͬvideo| ޹Ʒþþþ| þó97˰| һ|ҹ| ŷۺһ| Ʒ| ŷڶҳ| þоƷ15һ| ŷavӰ| 99оƷ| պƵһ| ŷٸ| þƵ| þþƷƷ| | һƵ| avۺ| 99ƷƵ| պ޲| ޾þһ| պŷ| 99ƷƵһ| һɫþۺ޾ƷС˵| 91þþƷ91ɫ| һ߲Ƶ| һë| һ߸| ҹҹav˾þ| ھƷ߹ۿ| һŷպ| һƷþþ| ŷһɫͷ | ŷպһ߹ۿ | þƵ| þҹɫƷa | ҹҹƷƵ| Ʒ99þþþþ| һƷ| ŷ| ŷһѲ| þþƷ| þۺɫ| ŷƷһ| ŷҹƷþþþþ˳| ŷƵĻ| Ů˾ƷƵ| ˾þɫۺ98| 91þۺ| ŷȷ| þþƷһ| ѹۿ| ձ߹ۿ| һav| ŷһ| þ߲| ŷػһ| þþþþ| ŷۺϹһ| ҹƷþþþþþapp | ӰԺѹۿ| þþþþ㽶| ŷպۺ| һëƬ| һѿ| þò2019Ļ| ޻ɫѵӰ| 18þôƬ| 鶹ƷƷ97㽶| ŷɫƵ| ޸Ʒ| ҹþõӰ| ޹һaëƬ| ŮƵ| ŷƵ| Ժavһ| һ| ŷva| ҹӰԺպ| ŷպһ߿ | Ʒžžþþþþþ| ޵Ƶ| þþƷһ| ޼| þƵ| һƵ߹ۿ| һŷ| ޵һɫ| þҹɫӰԺѸ|