• <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>

            麒麟子

            ~~

            導航

            <2025年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            統計

            常用鏈接

            留言簿(12)

            隨筆分類

            隨筆檔案

            Friends

            WebSites

            積分與排名

            最新隨筆

            最新評論

            閱讀排行榜

            評論排行榜

            #

            冒泡排序與選擇排序的不同、快速排序與選擇排序的結合

                 摘要: 目前廣為使用的快速排序和選擇排序聯合使用,也會有意想不到的提升!
            眾所周知,當用快速排序法排序時,劃分到很細的時候,明顯很虧。 比如:兩三個數排序卻要劃分成兩堆,這樣很劃不來。所以,我們可以設定一個閥值,當快速排序劃分到一定粒度的時候,便采用選擇排序。 至于這個閥值,可以通過performace來測試,以得到一個“最優值”

              閱讀全文

            posted @ 2010-05-04 23:44 麒麟子 閱讀(2266) | 評論 (3)編輯 收藏

            某內存池中的指針用法

            內存池實現有許多種,各有不同的優缺點。

            這里不是主要說內存池,只是覺得這個內存池中的指針用得很飄逸!

             

             1template <class T,int AllocSize = 50>   
             2class MemPool   
             3{   
             4public:   
             5    static void* operator new(size_t allocLength)   
             6    {   
             7        if(!mStartPotinter)   
             8        {   
             9            MyAlloc();   
            10        }
               
            11        //將當前指向空閑內存起始地址作為反回地址   
            12        unsigned char* p = mStartPotinter;   
            13        //取出空閑區域前4字節的值,賦值給空閑地址   
            14        //因為前四字節中存放了下一個BLOCK的地址   
            15        mStartPotinter = *(unsigned char**)mStartPotinter;   
            16        return p;   
            17    }
               
            18  
            19    static void operator delete(void* deleteP)   
            20    {   
            21//      assert(deletePointer);   
            22        *(unsigned char**)deleteP = mStartPotinter;   
            23        mStartPotinter = (unsigned char*)deleteP;   
            24    }
               
            25  
            26    static void MyAlloc()   
            27    {   
            28        //預分配內存   
            29        mStartPotinter = new unsigned char[sizeof(T)*AllocSize];   
            30        //構造BLOCK之間的關系    
            31        //每個BLOCK的前4BYTE存放了下一個BLOCK的地址   
            32        unsigned char** next = (unsigned char**)mStartPotinter;   
            33        unsigned char* p = mStartPotinter;   
            34  
            35        for(int i = 0; i< AllocSize;++i)   
            36        {   
            37            p +=sizeof(T);//步進   
            38            *next = p;//賦值   
            39            next = (unsigned char**)p;//步進   
            40        }
               
            41        *next = NULL;   
            42    }
               
            43  
            44    static unsigned char* mStartPotinter;   
            45}
            ;   
            46  
            47template <class T,int AllocSize>   
            48unsigned char* MemPool<T,AllocSize>::mStartPotinter = NULL;  
            49
            50
            51本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/wqjqepr/archive/2010/05/03/5552322.aspx

             

             

            簡單提示一下: unsigned char** next = (unsigned char**)mStartPotinter;

            mStartPotinter作為二維指針的時候,相當于是一系列的unsigned char* [].

            對于第一個 *next 相當于(unsigned char*)mStartPointer[0].

            第二個相當于(unsigned char*)mStartPointer[sizeof(T)*1];

            第三個相當于(unsigned char*)mStartPointer[sizeof(T)*2];

            所以,構造BLOCK之間關系的時候,也可以寫成

             

            1for(int i = 0; i< AllocSize;++i)   
            2{   
            3 p +=sizeof(T);//步進   
            4 unsigned char* pp = (unsigned char*)(p[sizeof(T)*i]);   
            5 pp = p;//賦值   
            6}
             

             

             

            不想多解釋了,累。估計多看幾分種啥都明白了!

             

             

            posted @ 2010-05-03 18:33 麒麟子 閱讀(1959) | 評論 (11)編輯 收藏

            函數中分配內存的問題

                 摘要: 只是為了能夠讓自己講清一些事!

            大家都知道,如果想要在在C++的函數中分配內存,那么就只得使用指針的引用傳遞,或是二級指針

            如:void MyNew(int** p)
            {
            *p = new int;
            }
            void MyNew(int*& p)
            {
            p = new int;
            }


              閱讀全文

            posted @ 2010-04-27 22:52 麒麟子 閱讀(1755) | 評論 (11)編輯 收藏

            [轉]C++ 對象的內存布局

                 摘要: 這是陳皓繼《C++虛函數表解析》之后的又一大作。
            講述了C++對象在以下情況的內存布局。值得一看!
            1)有成員變量的情況。

            2)有重復繼承的情況。

            3)有虛擬繼承的情況。

            4)有鉆石型虛擬繼承的情況。

            還有,對于前幾天的貼子表示報歉,今天是直接貼到這里的。 沒亂碼,還好?。。?nbsp; 閱讀全文

            posted @ 2010-04-27 20:56 麒麟子 閱讀(2234) | 評論 (5)編輯 收藏

            [原]譯:一個游戲引擎所應具有的元素

                 摘要: 3D游戲引擎設計是一項巨大的軟件工程。一個人也能寫出一個游戲,但這不只是熬一兩個晚上便能搞定的,你很可能會出寫出幾兆的源代碼量。如果你沒有持久的信念與激情,你早晚會放棄。 當然,別指望你的第一次嘗試就能寫出完整的引擎,選擇一個對引擎需求較小的項目。努力,你就能成功。  閱讀全文

            posted @ 2010-04-26 23:34 麒麟子 閱讀(2167) | 評論 (11)編輯 收藏

            僅列出標題
            共38頁: First 14 15 16 17 18 19 20 21 22 Last 
            国产精品99久久久精品无码| 久久久久久曰本AV免费免费| 久久久久亚洲av无码专区| 亚洲精品无码久久久久久| 国产精品久久婷婷六月丁香| 奇米影视7777久久精品| 中文字幕无码免费久久| 国产精品99久久99久久久| 成人国内精品久久久久影院VR| 99久久人妻无码精品系列| 香蕉久久夜色精品国产2020| 亚洲成色www久久网站夜月| 亚洲国产精品久久久久| 久久久久波多野结衣高潮| 国产91久久综合| 久久99精品久久久久子伦| 18岁日韩内射颜射午夜久久成人| 亚洲伊人久久成综合人影院 | 久久最新精品国产| 久久精品无码av| 午夜人妻久久久久久久久| 久久国产免费直播| 欧美精品一本久久男人的天堂| 久久久久高潮综合影院| 亚州日韩精品专区久久久| 亚洲?V乱码久久精品蜜桃| 久久国产精品一区| 93精91精品国产综合久久香蕉 | 色欲综合久久中文字幕网| 久久久久久久免费视频| 国内精品久久久久影院亚洲 | 亚洲av伊人久久综合密臀性色| 久久99热这里只频精品6| 久久久精品久久久久影院| 无码人妻少妇久久中文字幕蜜桃| 午夜精品久久久久久影视riav| 久久影视国产亚洲| 久久超碰97人人做人人爱| 久久精品嫩草影院| 亚洲国产精品无码久久九九| 丁香色欲久久久久久综合网|