• <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 
            久久人妻少妇嫩草AV蜜桃| 久久精品国产亚洲αv忘忧草| 成人免费网站久久久| 粉嫩小泬无遮挡久久久久久| 精品亚洲综合久久中文字幕| 久久人人爽人人爽AV片| 日韩精品久久久肉伦网站| 国产AV影片久久久久久| 久久精品人人做人人爽电影 | 久久久久国产精品三级网| 亚洲另类欧美综合久久图片区| 无码人妻精品一区二区三区久久久| 久久久亚洲欧洲日产国码二区| 久久九九久精品国产| AV狠狠色丁香婷婷综合久久| 久久久久久青草大香综合精品| 久久久久国产精品熟女影院| 亚洲国产成人久久笫一页| 久久久久久久尹人综合网亚洲| 亚洲国产成人久久综合碰| 久久综合九色综合精品| 亚洲精品无码成人片久久| 色婷婷久久久SWAG精品| 亚洲国产天堂久久综合网站| 性高湖久久久久久久久| 综合久久给合久久狠狠狠97色| 日本免费久久久久久久网站| 欧美一区二区三区久久综| 久久精品国产亚洲AV忘忧草18| 久久久久亚洲AV成人网人人软件| 久久精品中文騷妇女内射| 熟妇人妻久久中文字幕| 狠狠色婷婷久久一区二区| 久久青青草视频| 久久久亚洲裙底偷窥综合| 中文字幕无码久久人妻| 久久无码中文字幕东京热 | 亚洲精品美女久久久久99| 久久综合偷偷噜噜噜色| 三级三级久久三级久久| 狠狠综合久久综合88亚洲|