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

            hdqqq

              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              35 隨筆 :: 0 文章 :: 104 評論 :: 0 Trackbacks
            共2頁: 1 2 
            @Chipset
            麻煩看清楚文章再噴
            12 行沒檢查返回值
            53 行 new 一定成功嗎
            在alloc和free中看到了new和delete,這種分配不會是o(1)的。
            re: 被delete難倒了[未登錄] hdqqq 2011-04-01 11:32
            如果樓主使用 /mt 編譯,dll啟動時使用自己的堆, 在主程序中new 出來的對象,再通過指針傳給dll,然后在dll中釋放,會產(chǎn)生錯誤,主程序和dll使用不同的堆。
            * 查找光標當前單詞
            gd 查找光標單詞定義
            ga 顯示光標下字母ascii碼
            比較討厭這種引用計數(shù)指針的使用,一旦使用就意味這在所有的函數(shù)參數(shù)中必須使用指針引用或者值拷貝,一旦某些函數(shù)要求用裸指針,就可能引發(fā)問題。
            文件映射無助于增加進程可用地址空間。除非你修改set的實現(xiàn),把對節(jié)點的訪問直接
            對應到對文件的訪問,但是在大數(shù)據(jù)量的情況下,隨機訪問的效率很差。

            關鍵還是在于減少內(nèi)存的使用上

            1. stl 中的set使用紅黑樹實現(xiàn)的,一個節(jié)點有左,右,父節(jié)點三個指針和一個紅黑標志位.32位系統(tǒng)下最少占用13個字節(jié),
            考慮內(nèi)存對齊下,可能使用到16個字節(jié),在大數(shù)據(jù)量的情況下,為了保持這個樹結構,額外使用的內(nèi)存是很多的,可以考慮使用hash set.

            2. url長度都比較長,可考慮計算md5 hash,減少存儲占用.

            3. 不要妄想把所有數(shù)據(jù)都存在內(nèi)存,總會有內(nèi)存耗盡的時候,另外,如果程序異常或者崩潰,所有數(shù)據(jù)將丟失.

            我以前實現(xiàn)的一種方式是,以數(shù)據(jù)庫為主要存儲,內(nèi)存作為優(yōu)先查詢cache.
            1. 數(shù)據(jù)庫建散列表, 以十六進制 0-F 開始,根據(jù)md5第一位決定存儲表,用于存儲md5值,并對md5建索引加快查詢.
            2. 在內(nèi)存中用set或map保存md5值,查詢時先計算url md5值,再查詢內(nèi)存,如果不存在,則從數(shù)據(jù)庫加載.如為新url,先存入內(nèi)存.
            3. 內(nèi)存總量到一定閥值,進行數(shù)據(jù)保存,并清空內(nèi)存cache.

            不過這種實現(xiàn)存在cache命中問題,你可以一次加載整張表,也可以用 like 查詢條件,減少數(shù)據(jù)庫返回的記錄數(shù).

            已有的php實現(xiàn),內(nèi)存cache200萬條記錄,總內(nèi)存使用在1200M左右,可長時間運行,沒有內(nèi)存使用問題.
            麒麟感覺就是參照freebsd搞的,看top的顯示就知道了,可以說是一抹一樣.
            可能就是直接拿過來調(diào)了一下。
            配置文件中增加
            imap <F3> <Esc>gg=G
            或者
            nmap <F3> gg=G
            以后一鍵搞定.
            @hdqqq
            上面已經(jīng)貼了類似的,我的作廢。
            unsigned long val ;
            int count = 0;
            while(val) {
            count += (val & 1) ;
            val >>= 1;
            }
            用協(xié)議棧代碼和ace代碼對比欠妥,基礎層要提供的接口和要實現(xiàn)的功能相對固定,而在應用層上,要復雜很多。
            照著樓主的代碼,果然有問題,麻煩樓主以后寫代碼或者轉文章對讀者負責一下,最煩這種轉文章的,搞的搜索結果都一樣,都是轉帖的。
            re: 邪惡的Windows[未登錄] hdqqq 2009-07-31 17:25
            你有命名MessageBox的權利,條件是別去包含 <windows.h>
            既然你包含了這個文件,那就乖乖換名字吧。
            涉及的東西太多了,有些還不完善,線程庫在windows下只是簡單的封裝,連優(yōu)先級調(diào)整都沒有,線程局部存貯沒有編譯開關。
            這個和include .h 文件有啥區(qū)別,后綴不同而已。
            是啊,所以我讓你看
            typeid(std::string()).name()
            的輸出.
            typedef void (type_func)(void);
            typedef void (*ptype_func)(void);

            template <typename T>
            class template_class
            {
            private:
            typedef T local_type;
            public:
            template_class()
            {
            std::cout << typeid(local_type).name() << std::endl;
            }
            };

            void test()
            {
            template_class<int> la;
            template_class<type_func> lg;
            template_class<ptype_func> lb;
            template_class<int()> le;
            template_class<int(int)> lf;
            template_class<int(int())> lc;
            template_class<void()> ld;
            }

            上面的代碼可編譯通過
            std::string() 也可以看作是一個類型.

            long test(void);
            sizeof(test) 和 sizeof( test() )
            前面一個是 函數(shù)指針, 后面一個是 test 的返回值 long.

            你可以看看這個的輸出.
            std::cout << typeid(std::string).name() << std::endl;
            std::cout << typeid(std::string()).name() << std::endl;

            在下面這句話里
            boost::function<std::string()> func(Test);

            這個std::string 的變量根本不會被構造, 所以不存在 所謂的實例.
            re: C 還是 CPP[未登錄] hdqqq 2009-04-10 18:41
            @Lingol
            可能我舉得例子太簡單了,在編譯時候沒開優(yōu)化的情況下,是不會精簡代碼的.在復雜的情況下,如果 funcb被這個類的某個虛函數(shù)依賴.
            如:

            class CTestClass
            {
            public:
            CTestClass(void);
            ~CTestClass(void);
            public:
            void mem_func1();
            void mem_func2();
            virtual void vfunc();
            };


            int test_function(int);

            static int glob_val;

            CTestClass::CTestClass(void)
            {
            glob_val = 10;
            }

            CTestClass::~CTestClass(void)
            {
            glob_val = 0;
            }

            void CTestClass::mem_func1()
            {
            glob_val = 1;
            }

            void CTestClass::mem_func2()
            {
            printf("hello world\n");
            }

            void CTestClass::vfunc()
            {
            mem_func1();
            }


            int test_function(int val)
            {
            int ret = val;

            CTestClass lt;
            lt.mem_func2();
            return ret;
            }
            用vs2003把
            上面的代碼被編譯成了lib,在main函數(shù)中調(diào)用
            test_function(atoi(argv[1]));開啟全部優(yōu)化,在生成的map文件中顯示

            _main 00401000 f comple_test.obj
            ??0CTestClass@@QAE@XZ 00401020 f complie_lib:TestClass.obj
            ??1CTestClass@@QAE@XZ 00401040 f complie_lib:TestClass.obj
            ?mem_func1@CTestClass@@QAEXXZ 00401060 f complie_lib:TestClass.obj
            ?mem_func2@CTestClass@@QAEXXZ 00401070 f complie_lib:TestClass.obj
            ?vfunc@CTestClass@@UAEXXZ 00401080 f complie_lib:TestClass.obj
            ?test_function@@YAHH@Z 00401090 f complie_lib:TestClass.obj

            可以看到,盡管只調(diào)用了構造,析構和mem_func2,mem_func1 還是連接在里面.

            re: C 還是 CPP[未登錄] hdqqq 2009-04-07 23:12
            我說的這個程序,它的用途是和一些數(shù)據(jù)打包后,需要在客戶機器上直接運行,不需要安裝或依賴額外的dll,就像直接運行的電子書或者demo啥的,如果試想程序有上兆,數(shù)據(jù)才幾百k是不是有點浪費,而且以后還可能制作成千上百個的文件,累計起來是很可觀的,執(zhí)行文件大小和效率一樣重要. 另外 crt用dll的話,vc6的crt dll基本上windows系統(tǒng)都有,但是vc2005的crt就不是每個系統(tǒng)都有的,你需要另外裝個vc2005 redistributable. 至于庫的問題,程序的配置文件,一開始用的是一個跨平臺的xml解析lib, 開始的時候運行的很好,但是當配置文件在600K以上的時候,效率慘不忍睹,后來算了,改為直接結構化讀寫,一樣解決問題,我寫這篇文章的目的,不是說啥庫都不用,而是不要濫用,模版也一樣,在做程序規(guī)劃的時候,在寫程序的時候,多用用 "奧卡姆剃刀".
            re: C 還是 CPP[未登錄] hdqqq 2009-04-05 19:27
            效率還是很重要的,打個比方,客戶要輛自行車,一個手工作坊弄了輛捷安特出來,一個號稱全能的車間弄了輛28吋永久出來,你說那個更好,我寫這篇文章的目的,是想說在寫代碼的時候,用到某項功能或者庫的時候,你需要清楚地了解,你會付出哪些代價,并且權衡一下,如果沒有使用的必要,就不要用.對于一個新開發(fā)的項目來說,沒有對比,也許還不是很突出,但是對于已有項目來說,是一個很重要的問題.
            多謝反饋意見.
            這個錯誤是
            ts.WriteLine(external.menuArguments.document.selection.createRange().text);
            這句代碼有問題,缺省打開的是ascii文件, 改成uncode模式打開文件就好了.
            修改后的代碼

            <script language="javascript">
            var fso,ForAppending,ts;
            var t_str;
            fso=new ActiveXObject("Scripting.FileSystemObject");
            ForAppending = 8;
            ts = fso.OpenTextFile("c:\\collect.txt",ForAppending, true, -1); //在這里是一個絕對路經(jīng),用的時候必須修改
            t_str = external.menuArguments.document.selection.createRange().text;
            ts.WriteLine(t_str);
            ts.WriteLine("#########################");
            ts.close();
            </script>
            任務只是抽象意義上的需要運行的代碼,函數(shù)和成員函數(shù)只是對于人來說的,對于機器來說,都是一樣的,至于已有函數(shù)滿不滿足接口我想是架構需要考慮的問題,其實一旦代碼編譯好了,其調(diào)用方式就定了,如果非要滿足所有的調(diào)用方式,可能rpc或者com的方式更適合一些。
            我以前寫的關于 函數(shù)和線程方面調(diào)用的文章。

            http://blog.csdn.net/hdqqq/archive/2005/06/29/407674.aspx
            其實不一定要過度追求線程實現(xiàn),一般的實現(xiàn)方式是啟動幾個線程提供對外服務,有任務提交后,分配運行。這樣可伸縮性也比較強。
            re: boost 1-35編譯[未登錄] hdqqq 2008-07-16 17:13
            你到linux下編譯一下就知道了,不帶版本號的是一個鏈接,但是在windows下不支持,所以有兩個了,用鏈接的好處就是可以隨時升級新的版本.
            re: HTML 轉 text 工具 hdqqq 2008-07-15 07:46
            c++編譯的時候,對函數(shù)名進行修飾,用于實現(xiàn)函數(shù)充載,而c里面沒有這個,所以需要用extern “C” 在對頭文件進行聲明的時候加以區(qū)分。這個用于鏈接的時候進行函數(shù)名查找。
            re: 可愛的Vim[未登錄] hdqqq 2008-05-26 10:56
            vim 是控制臺程序,所以可以遠程登錄后進行文件編輯,這點上windows下的編輯器根本沒這個功能.

            vim用熟了,鼠標根本用不著,很靈活.
            @苦惱
            我寫的爬蟲,主要的幾個類都在代碼里面了,你用java開發(fā)的話,關鍵還是找到對應的功能,象map或者hash map, http下載, 正則表達式等功能的類或者庫,還有就是處理數(shù)據(jù)庫的模塊,應該可以實現(xiàn)的.
            是的,那些在javascript中的url比較難用正則表達式概括出來,因為還可能是根據(jù)變量生成的,所以就直接過濾了.

            至于排重的問題,因為我計算的是url的md5,而不是整個html的md5,所以在碰到頁面更新而url不變的時候,會有問題.這個我在測試新浪新聞首頁的時候,發(fā)現(xiàn)盡管新浪新聞首頁的url不變,內(nèi)容會變,但是具體到其中的某條新聞,都是有單獨的url的.碰到這種情況,只要周期的運行一下爬蟲就可以了,我現(xiàn)在的機器上就是用crontab 定時運行的.

            這個也和爬蟲的目的有關系,有的可能更關注某個具體站點,有的也許想多爬一些站點,這個是深度和廣度的關系,和使用者的策略有關.

            我現(xiàn)在用的是一張表記錄歷史記錄,在百萬數(shù)量記錄下,效率不是最好的,建立更小的的分布存儲表可能會更好一些. 這些可以部署架構方面進行改進.
            郵件已經(jīng)發(fā)了.
            @TD
            是的,如果開始的時候指定vector是可以的,但是限定了vector的大小。
            不用vector是考慮到在大數(shù)據(jù)量的情況下,vector會進行內(nèi)存的拷貝復制,所以采用了list
            re: OOP的黃昏[未登錄] hdqqq 2007-12-07 18:31
            標題取的和內(nèi)容沒啥聯(lián)系。看了標題跑進來,原來在將concept。
            extern "C" 之后,就不能重載函數(shù)了,關鍵還是函數(shù)名修飾的問題.
            如果隱藏私有的數(shù)據(jù)成員,會不會造成實現(xiàn)代碼中sizeof(class) 和使用該類時sizeof(class) 大小不同, 導致數(shù)據(jù)出錯.
            裝個beryl 弄個立體桌面,比vista 酷多了.
            loki for vc6 我已經(jīng)上傳了,下載地址.
            http://www.shnenglu.com/Files/hdqqq/lokiVC6port.zip
            我這里有,留個mail地址我發(fā)給你.
            跨平臺的數(shù)據(jù)庫操作接口,比較難實現(xiàn).
            類似于Format的用法可以象下面這樣,只是少了格式字符串
            make_str("當前計數(shù):",100,"總計數(shù)", 150);
            至于效率的問題,確實是沒有sprintf這種直接操作的函數(shù)快,因為涉及到返回的拷貝復制的開銷和stringstream的內(nèi)部實現(xiàn)等制約.
            這些函數(shù)的目的只是為了生成字符串,至于是顯示出來還是寫入文件,是看需求的,功能就象cstring 的format 成員函數(shù).
            這個倒是沒考慮過.
            你可以取看看boost中的preprocessor 部分,講的是預處理元編程,你這個宏的功能和boost 中的BOOST_PP_ENUM_PARAMS 宏功能類似.
            共2頁: 1 2 
            久久久久久精品无码人妻| 东方aⅴ免费观看久久av| 久久精品国产亚洲AV电影| 亚洲AV无码久久精品蜜桃| 国产精品久久自在自线观看| 亚洲国产成人久久综合一| 久久se精品一区二区影院| 色综合久久天天综线观看| 狠狠色婷婷久久综合频道日韩 | 国产成人综合久久精品红| 97久久综合精品久久久综合| 久久夜色精品国产亚洲| 欧美牲交A欧牲交aⅴ久久| 久久精品国产精品亚洲| 国产一区二区精品久久| 亚洲国产精品久久久天堂 | 国产99久久久国产精品~~牛| 香蕉久久夜色精品升级完成| 久久亚洲精品中文字幕三区| 亚洲欧美日韩久久精品| 色婷婷久久久SWAG精品| 丰满少妇人妻久久久久久| 亚洲va久久久噜噜噜久久狠狠| 久久精品国产一区二区三区| 精品久久久久久久久午夜福利| 亚洲国产精品成人久久蜜臀 | 波多野结衣中文字幕久久| 精品久久久一二三区| 久久AⅤ人妻少妇嫩草影院| 久久成人国产精品二三区| 久久久婷婷五月亚洲97号色| 香蕉久久夜色精品升级完成| 99久久国产亚洲综合精品| 日韩va亚洲va欧美va久久| 久久亚洲国产成人影院网站 | 久久精品人人槡人妻人人玩AV| 久久亚洲欧洲国产综合| 久久人人超碰精品CAOPOREN| 久久播电影网| 一本色道久久综合狠狠躁篇 | 久久精品中文闷骚内射|