• <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年6月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            293012345

            統計

            常用鏈接

            留言簿(12)

            隨筆分類

            隨筆檔案

            Friends

            WebSites

            積分與排名

            最新隨筆

            最新評論

            閱讀排行榜

            評論排行榜

            #

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

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

              閱讀全文

            posted @ 2010-05-04 23:44 麒麟子 閱讀(2271) | 評論 (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 麒麟子 閱讀(1962) | 評論 (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)有鉆石型虛擬繼承的情況。

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

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

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

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

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

            僅列出標題
            共38頁: First 14 15 16 17 18 19 20 21 22 Last 
            欧美日韩精品久久久久| 2022年国产精品久久久久| 国内精品欧美久久精品| 久久久久久国产精品美女| 久久久WWW免费人成精品| 欧美精品国产综合久久| 人妻精品久久无码专区精东影业| 国内精品久久久久久99| 久久不见久久见免费影院www日本| 中文字幕精品久久| 欧美综合天天夜夜久久| 无夜精品久久久久久| AV无码久久久久不卡网站下载| 日韩AV毛片精品久久久| 国产亚洲精品自在久久| 无码人妻久久一区二区三区蜜桃| 久久久久AV综合网成人| 久久综合亚洲色一区二区三区| 日韩精品久久久久久| 国内精品伊人久久久久777| 99久久精品国产毛片| 一本色道久久88精品综合| 久久www免费人成看国产片| 韩国无遮挡三级久久| 人妻丰满AV无码久久不卡| 午夜精品久久久久久影视riav| 久久97久久97精品免视看| 久久99国产精一区二区三区| 久久青青草原亚洲av无码app| 狠狠色丁香婷婷久久综合| 亚洲国产精品无码久久久久久曰| 丁香五月综合久久激情| 精品免费tv久久久久久久| 亚洲乱码中文字幕久久孕妇黑人| 少妇久久久久久被弄到高潮| 久久久久久午夜成人影院| 欧美大香线蕉线伊人久久| 久久青青草原精品国产| 久久久噜噜噜久久中文福利| 久久香蕉超碰97国产精品| 久久精品国产99久久久|