• <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>
            foxriver
            Keep It Simple and Stupid.
            posts - 12,  comments - 39,  trackbacks - 0
            前幾天被老版本pdb格式折磨的死去活來,由于源文件多,大于64M報錯,把pdb嵌入dll里也報錯。無奈只能用line number only來調試,郁悶的不行。
            文章專業啊,那么多方法,慚愧。偶個人推薦Bilateral,效果不錯。O(1)的中值濾波和FFT也值得考慮一下。
            re: 寫程序真他媽爽啊[未登錄] foxriver 2011-02-25 12:00
            強啊,純支持留爪。
            pix,有調試信息輸出,順便做個筆記,呵呵。
            有時,說話太多也是杯具-_-
            re: 一個大整數類的實現 foxriver 2011-02-14 04:00
            商用RSA程序一般有以下三個特點:
            1. 匯編級優化
            2. 對于Montgomery優化算法上的極度理解,把大量的耗時操作都放在預計算參數里解決。
            3. 無內存分配函數的調用開銷,也就是全程不調用malloc(),或者自己重載內存分配模塊。
            4. 對現代cpu利用有加,基本很少用byte級別操作,一般都是uint32。

            這些都是自己造輪子挺難超越的障礙,哎。。在我機器上這些程序用了crt算法,2048bit加解密也不會超過0.01秒。
            我從書本上弄了個非常簡單的大數算法,無CRT,直接算RSA 2048bit,速度能有0.1s.

            如果用到了標準開源庫,比如gmp之類,加上RSA的優化冪模算法,我測試了一下,都在0.0001s就搞定了,實在是有很大差距。

            要說最優,首推google的優化算法:http://omaha.googlecode.com/svn/trunk/common/security/rsa.cc,,計算速度絕對瞠目結舌,就是那個預計算RR值有點BT了。

            sleep/usleep主要用途是均分cpu占用資源,變相降低當前進程優先級。并不是為了計時而設定的。
            @waiting4you

            杯具,測試數據寫錯了,是十進制的結果,被我寫成了16進制,已經修正。感謝。
            @atyuwen

            啥,已經有人實現過了?有點杯具,去找來bloom filter研究研究。
            @oldman
            你說的很對哦,呵呵。static_cast僅僅只能有個編譯警告,解決不了任何問題。
            @jmchxy

            你說對了一半,address1確實等于value的值(也就是D的內存值)。但在單一繼承的情況,這種轉換的寫法是絕對允許的,而且結果是完全正確。

            唯獨多重繼承情況下會出錯,我就把這種情況歸結為多重繼承的問題了。

            單一繼承下,A,B,C,D共用一個D的內存地址是沒問題的。
            多重繼承下,A,B,C,D共用一個D的內存地址是不可以的。

            這就是兩者最大的區別,也是文章核心所指 --- 父類是否能和子類共享同一內存地址。

            @空明流轉

            class C : public A, public B
            類C同時繼承了A和B,這就是多重繼承。 這篇文章的本意是雖然B是D的子類,但是不能直接用(B*)做類型轉換,需要寫成(B*(D*))這種形式,因為B和D的關系不是單根繼承。

            ps:虛函數的那種繼承叫虛擬繼承。

            @Jakcie

            這樣的話,最終生成exe里,數組的實體會被克隆N份,你可以用ultraedit來查看。比如table1是100k, 有10個cpp引用了,exe的最終大小 = 程序 + 數組1000k.
            移動互聯網有個致命的弱點,入門的門檻低,那種java低技術水平的東西,很難有強大的市場競爭力。

            想要活得好,至少在技術方面比對手高出一截。然后才是市場,運營,管理的問題。
            最后一段說的很真切,人家美國已經能把3D運算放到服務器,通過極快的網速,在沒有游戲顯卡的機器上實現3D加速。

            未來這個技術能在網游實現的話,一切的環境破壞都是有可能的。
            “他應該覺得自己沒有預見未來大勢的能力啊,或者說預測的不準,所以只好估測一下,然后憑運氣嘍”

            運氣還是很重要的。投資和招聘一樣,比如網游開發,是高科技產業,有好項目你得找到合適的人選才行,不是說有錢就能怎么怎么的。成功的關鍵依靠人,而人這個最不穩定的因素,是靠投資者的運氣。
            給normal做矩陣計算時,只提取旋轉變換因子,不用到平移,切邊,縮放這些因子不就可以了。
            "在國外,35歲以上的程序員才是高手,看來又是一個忽悠招聘",
            國外35歲以上都是算法高手,不是什么實際項目開發。

            知道scene demo大賽嗎?參與的全部都是頂尖程序員。還不是看到不少因為體力不支,而提前退休的。人的體力畢竟有限,30歲后會分很多精力在現實生活中,這點就別懷疑了。
            針對游戲的每幀更新UI,這種消息結構是沒有什么太大價值,一堆回調繼承函數會迅速膨脹代碼量。

            微軟用消息做UI最大的好處,是效率。可是當顯卡,CPU如此快速,為什么不尋找另外一種UI解決方式?
            "這點有點明白了,一開始多了,而以后必須向下兼容,于是肩上的包袱就永遠卸不下來了,是嗎?" 支持+贊同KISS原則。

            真正0依賴意義并不大,自己寫的程序難免有BUG,要完善勢必花很多精力,時間,你真的覺得自己花上幾年完善一個LIB是值得的?如果不是研究院,還是按照具體工程來擴展自己的類比較實在些。

            程序寫多寫大,最大的感受是以前程序一切速度優先,有些看起來雜亂的語法,現在都會用簡單慢速明了的語句去表達。。速度越來越不是重點了,結構清晰才是程序長久生命之源。
            那么復雜。。對于數組,智能指針容易內存泄漏。實用性最重要,程序是要不斷維護的,一切從簡。。

            我用最簡版本,也過得滋潤瀟灑,KISS 原則。。


            // Quake4 SourceCode, this class is NOT safe for array new's. It will not
            // properly call the destructor for each element and you will silently leak memory.
            // it does work for classes requiring no destructor however(base types)
            template<typename T> class auto_ptr
            {
            public:
            explicit auto_ptr(T* ptr = 0) : m_ptr(ptr)
            {
            }

            ~auto_ptr()
            {
            delete m_ptr;
            }

            T& operator*() const { return *m_ptr; }
            T* operator->() const { return &**this; }

            private:
            // disallow copies
            auto_ptr<T>& operator=(auto_ptr<T>& ptr);
            auto_ptr(auto_ptr<T>& ptr);

            T* m_ptr;
            };

            re: 人不奮斗枉青年[未登錄] foxriver 2009-11-02 18:16
            看要怎么奮斗,沒有積累,不動腦子做一輩子程序,那叫愚蠢。

            奮斗要把有限的精力投入到專一的領域,才會有所成就。
            at 要離婚的程序員:

            應該不是每個程序員都那么慘吧? 真的話就太悲哀了, 你用的是什么語言?

            "我只要做Java(C++);"

            最后一句有什么問題? 人的精力是有限的,東看看西摸摸,到最后什么都不精通.還不如只看一門語言.

            你知道某職業C++程序員,讓他臨時轉LUA開發后的感想是什么嗎?"就如斷一條胳膊在干活!"

            吐血啊,自己來實現NtOpenProcess? 有這水品,干脆轉行開發操作系統算了!
            夜半三更來頂貼。
            @dongming

            我導出excel2003是純粹的文本xml格式,自己一行一行邊分析邊導出的,就是麻煩點,沒有什么技術難度。

            你知道輸出xml的程序部分是很亂的,似乎也沒有很大的參考價值。需要的話可以加我QQ。
            GetQueueCompeltionStatus 恐怖的一沓糊涂,運行一段時間就蹦出些莫名的錯誤,我這輩子是不會再用了。。。socket萬歲。

            BOOL bSuccess = GetQueuedCompletionStatus(m_hCompletionPort, &dwNumberBytes,
            &CompletionKey, (LPOVERLAPPED*)&overlap, 10);//10ms for cpu eat.

            time_check();

            if (overlap) personal = overlap->content;

            if (bSuccess == FALSE)
            {
            DWORD LastError = GetLastError();
            if (LastError == WAIT_TIMEOUT)
            continue;

            // 2 - 系統找不到指定的文件。
            // 121 - 信號燈超時時間已到。

            // 1450 - 系統資源不足,無法完成請求的服務。
            // 995 - 由于線程退出或應用程序請求,已放棄 I/O 操作。

            // 64 - 指定的網絡名不再可用。
            // 10053 - 您的主機中的軟件放棄了一個已建立的連接。
            // 10054 - 遠程主機強迫關閉了一個現有的連接
            // 10058 - 由于以前的關閉調用,套接字在那個方向已經關閉,發送或接收數據的請求沒有被接受。

            // 0 - 操作成功完成。
            // 997 - 重疊 I/O 操作在進行中。
            // 998 - 內存分配訪問無效。 (when fread() filesize > 3G)
            為了安全因素,SOCK_RAW在現在的操作系統上不支持了吧,只能用IMCP開頭的API。

            個人網絡項目里,ping值一直是用socket連接后,發個小包計算返回時間,實際測試效果也不錯。
            引用一直從來只定義const的飄過。
            "個人覺得只要能設計出合理的hash還是hash更快些吧", 嚴重同意!不過對于樓主來說,寫一個hash查找來替換std::map挺費時間的,內存管理上弄不好的話,效率和穩定性會下降,說不定還沒人家stl的快,所以不是很推薦呢。
            我喜歡用BKDR Hash Function,簡單方便,散布率對本人而言,已經相當滿意了。
            樓主應該不是hash表,是rt樹,不過兩者速度也差不多了,沒什么可優化的地方。hash只有在數據相當大的情況下(>1000萬條),才會有明顯優勢。
            如果你用的是標準的new,stl的string會頻繁調用也耗費不少時間。可以改用id software的那個idHeap,官網quake4 sdk里就有,速度號稱是vc版本的N倍。

            當然,前提必須是單線程。
            map查找已經足夠快了。你看看是不是單詞多,排序浪費了太多的時間。可以修改成radix sort, 加快速度。不過可能會有點難度,你要把string轉換成int,還用到多重排序。

            個人測試大規模數據,速度還能接受。貼點逼人的簡陋代碼,僅供參考,核心算法見:http://www.codercorner.com/RadixSortRevisited.htm

            class vector_string : public vector<string>
            {
            public:
            vector_string()
            {
            }
            ~vector_string()
            {
            }

            public:
            void sort(vector<int>* r_offsetset = 0)
            {
            vector<string> swaplist;
            swaplist.resize(_Num);

            vector<uint> sorttable1;
            vector<uint> sorttable2;
            vector<uint> sorttable3;

            sorttable1.resize(_Num);
            sorttable2.resize(_Num);
            sorttable3.resize(_Num);

            int i;
            for (i=0;i<_Num;i++)
            {
            const string& str = _First[i];
            uint b;
            int n;

            b = 0;
            for (n=0;n<4 && n<str.size();n++)
            {
            if (n == 0) b |= (str[n] << 24) & 0xff000000;
            if (n == 1) b |= (str[n] << 16) & 0x00ff0000;
            if (n == 2) b |= (str[n] << 8) & 0x0000ff00;
            if (n == 3) b |= (str[n]) & 0x000000ff;
            }
            sorttable1[i] = b;

            b = 0;
            for (n=4;n<8 && n<str.size();n++)
            {
            if (n == 4) b |= (str[n] << 24) & 0xff000000;
            if (n == 5) b |= (str[n] << 16) & 0x00ff0000;
            if (n == 6) b |= (str[n] << 8) & 0x0000ff00;
            if (n == 7) b |= (str[n]) & 0x000000ff;
            }
            sorttable2[i] = b;

            b = 0;
            for (n=8;n<12 && n<str.size();n++)
            {
            if (n == 8) b |= (str[n] << 24) & 0xff000000;
            if (n == 9) b |= (str[n] << 16) & 0x00ff0000;
            if (n == 10) b |= (str[n] << 8) & 0x0000ff00;
            if (n == 11) b |= (str[n]) & 0x000000ff;
            }
            sorttable3[i] = b;
            }

            radixsort_t radix;
            uint* sorted = radix.Sort((uint*)&sorttable3[0], sorttable3.size(), false).Sort((uint*)&sorttable2[0], sorttable2.size(), false).Sort((uint*)&sorttable1[0], sorttable1.size(), false).GetIndices();

            resort(sorted, 0, _Num, swaplist);
            if (r_offsetset) r_offsetset->resort(sorted, 0, _Num);

            // ------- 2 ------
            vector<uint> swaptable;
            swaptable.resize(_Num);

            for (i=0;i<_Num;i++) swaptable[i] = sorttable1[i];
            for (i=0;i<_Num;i++) sorttable1[i] = swaptable[sorted[i]];

            for (i=0;i<_Num;i++) swaptable[i] = sorttable2[i];
            for (i=0;i<_Num;i++) sorttable2[i] = swaptable[sorted[i]];

            for (i=0;i<_Num;i++) swaptable[i] = sorttable3[i];
            for (i=0;i<_Num;i++) sorttable3[i] = swaptable[sorted[i]];

            // 測試 程序 文字 1
            // 測試 程序 文字
            // 測試 程序 文比
            uint tab1 = 0xFFFFFFFF;
            uint tab2 = 0xFFFFFFFF;
            uint tab3 = 0xFFFFFFFF;

            int samecount = 0;
            for (i=0;i<_Num;i++)
            {
            if (tab1 == sorttable1[i] && tab2 == sorttable2[i] && tab3 == sorttable3[i])
            {
            samecount++;
            continue;
            }

            if (samecount)
            {
            int start = i - samecount-1;
            int total = samecount + 1;

            bool exactsame = true;
            for (int n=start+1;n<start+total;n++)
            {
            if (_First[n-1] != _First[n])
            {
            exactsame = false;
            break;
            }
            }

            if (exactsame == false)
            {
            quicksort_t::sort((int*)sorted, _First+start, total, _cmp);
            resort(sorted, start, total, swaplist);
            if (r_offsetset) r_offsetset->resort(sorted, start, total);
            }
            }

            tab1 = sorttable1[i];
            tab2 = sorttable2[i];
            tab3 = sorttable3[i];
            samecount = 0;
            }

            if (samecount)
            {
            int start = i - samecount-1;
            int total = samecount + 1;

            quicksort_t::sort((int*)sorted, _First+start, total, _cmp);
            resort(sorted, start, total, swaplist);
            if (r_offsetset) r_offsetset->resort(sorted, start, total);
            }
            }

            protected:
            void resort(const uint* r_sorted, int r_offset, int r_num, vector<string>& r_swaplist)
            {
            int i;
            for (i=0;i<r_num;i++) r_swaplist[i].swap(_First[r_sorted[i]+r_offset]);
            for (i=0;i<r_num;i++) _First[i+r_offset].swap(r_swaplist[i]);
            }
            };

            不錯哦,我已經加到自己的程序里的,謝謝樓主,呵呵。
            多用assert也不太合適,特別是服務器程序,萬一外掛來一個非法修改,你服務器端crc錯誤就彈一個assert,那就完了。
            re: 關于TCP丟包,斷開的疑問 foxriver 2009-08-10 16:55
            樓上說的不錯啊。拔網線在用輪訓select時很容易就能檢測出來。

            還有關于丟包,send不是任何時候都可以全部發送成功的,如果window buffer填滿了,send會只發送一部分,還有在send前,最好先select一下是否可以write的標志,這樣更安全些。
            我昨晚還在看這個呢。WH_MOUSE_LL也不需要DLL,而WH_MOUSE就需要了,user32.dll里會做進程DLL注入操作。兩者實現原理不一樣。
            re: 很隨的隨筆 foxriver 2009-03-14 14:34
            干程序員時間越長,以前的車輪就越有收益。個人體會是,不要太過局限于鉆技術牛角尖就OK,大凡高深的技術,實際用途少。
            回樓上,這個程序核心實現技術難度不大,就是文本文件分析。如今信息不比往日,老外高手的開源項目多如牛毛,可供學習參考的太多。鄙人代碼為了平臺的移植,都沒用標準庫,也沒用什么技巧。就不貼代碼出來獻丑了。
            非常謝謝樓上,剛發出來軟件就CRASH,郁悶死了。可否加我的QQ?631955284。再次感謝。
            自己寫一個isspace啊,十幾行的事情,我一直不太相信vc crt string部分。
            PC上有個類似的函數HeapCompact,初看很像內存整理,仔細看也不是的。內存整理牽涉的操作太多,操作系統也不好辦。

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

            常用鏈接

            留言簿(3)

            隨筆檔案

            文章檔案

            相冊

            1

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            91精品婷婷国产综合久久| 亚洲欧美精品一区久久中文字幕| 色青青草原桃花久久综合| 久久久久无码精品国产不卡| 伊人久久大香线蕉AV一区二区| 久久精品国产色蜜蜜麻豆| 99久久精品免费| 欧美精品福利视频一区二区三区久久久精品 | 奇米综合四色77777久久| 噜噜噜色噜噜噜久久| A狠狠久久蜜臀婷色中文网| 亚洲欧美成人综合久久久 | 伊人色综合久久天天| 国产成人综合久久精品红| 久久久久无码专区亚洲av| 欧美777精品久久久久网| 91精品国产9l久久久久| 99久久人妻无码精品系列蜜桃| 久久久久久久亚洲精品| 99久久国产热无码精品免费 | 色综合合久久天天给综看| 久久久久中文字幕| 精品国产99久久久久久麻豆| 久久久精品视频免费观看| 国产美女久久久| 激情久久久久久久久久| 久久亚洲国产成人影院网站| 久久人人爽人人爽人人片AV麻烦| 久久无码AV中文出轨人妻| 久久av无码专区亚洲av桃花岛| 久久精品二区| 久久夜色精品国产亚洲| 午夜欧美精品久久久久久久| 一本色道久久88综合日韩精品| 久久国产三级无码一区二区| 久久精品国产91久久麻豆自制| 久久国产精品无码一区二区三区| 色欲久久久天天天综合网| 色综合久久无码中文字幕| 日韩精品久久无码中文字幕| 久久国产精品无码一区二区三区 |