C++ 工程實踐(2):不要重載全域 ::operator new()

陳碩 (giantchen_AT_gmail) Blog.csdn.net/Solstice 本文只考慮 Linux x86 平台,服務端開發(不考慮 Windows 的跨 DLL 記憶體配置釋放問題)。本文假定讀者知道 ::operator new() 和 ::operator delete() 是幹什麼的,與通常用的 new/delete 運算式有和區別和聯絡,這方面的知識可參考侯捷先生的文章《池內春秋》[1],或者這篇文章。C++

C++ 工程實踐(3):採用有利於版本管理的代碼格式

陳碩 (giantchen_AT_gmail)Blog.csdn.net/Solstice版本管理(version controlling)是每個程式員的基本技能,C++ 程式員也不例外。版本管理的準系統之一是追蹤代碼變化,讓你能清楚地知道代碼是如何一步步變成現在的這個樣子,以及每次 check-in 都具體改動了哪些內部。無論是傳統的集中式版本管理工具,如 Subversion,還是新型的分布式管理工具,如 Git/Hg,比較兩個版本(revision)的差異都是其準系統,即俗稱“做一下

C++ 工程實踐(4):二進位相容性

陳碩 (giantchen_AT_gmail) Blog.csdn.net/Solstice本文主要討論 Linux x86/x86-64 平台,偶爾會舉 Windows 作為反面教材。C/C++ 的二進位相容性 (binary compatibility) 有多重含義,本文主要在“標頭檔和庫檔案分別升級,可執行檔是否受影響”這個意義下討論,我稱之為 library (主要是 shared library,即動態連結程式庫)的 ABI (application binary interface)

C++陰暗面

近來一篇<The Dark Side Of C++>在坊間廣為轉載,作為一個以C++為吃飯傢伙的程式員,還是應該下載下來好好讀一讀的。 總的來講還是總結的蠻全的,由於個人知識的限制,我讀完後將其分為三類:一類是我不以為然的,覺得算不上陰暗面;一類是深有同感,深受其害;而另外一類則是還不理解,需要日後有時間的時候加以研究的。一、不以為然不斷變更的標準,迫使我們需要不斷更新已有代碼。

如何加快C++代碼的編譯速度

C++代碼一直以其運行時的高效能高調面對世人, 但是說起編譯速度,卻只有低調的份了。比如我現在工作的原始碼,哪怕使用Incredibuild調動近百台機子,一個完整的build也需要四個小時,恐怖!!!雖然平時開發一般不需要在本地做完整的build,但編譯幾個相關的工程就夠你等上好一段時間的了(老外管這個叫monkey around,相當形象)。想想若干年在一台單核2.8GHZ上工作時的情境 -

C++中的類型重定義

這幾天工作時碰到一個C++的編譯錯誤(我使用的是Visual C++ 7.0),說是有一個類重複定義,仔細想想我們的這個項目也是做了好幾個Release了, 內部代碼應該不會有這樣的低級錯誤, 真把類型給重複定義了,檢查結果正如我預料的一樣。 就這樣, 我左右沒找到原因,被一個編譯錯誤給卡在那裡了。(在我的概念中, 程式錯誤的等級為:編譯錯誤->連結錯誤->邏輯錯誤, 此錯誤屬於最低級 )。這時我仔細看了一下錯誤提示,

C++中的標頭檔發布

所謂標頭檔發布,就是在build某個工程的build過程中,把標頭檔發布到特定的輸出目錄,而依賴於此工程的代碼,則需要從此特定的輸出目錄來include標頭檔。換句話說,在這種做法下,標頭檔與最終產生的library/binary具有同等地位,它也是build過程的一個產出。我們寫C++代碼,一般都是直接從source目錄包含所需要的標頭檔的,那麼為什麼要使用這種標頭檔發布的方式呢?

C++中的”pure virtual function call”

前幾天我們項目剛剛解決了一個pure virtual function call引起的stopship的bug,乘熱打鐵,學習總結一下。理論上的case當一個純虛函數被調用到時,vc++的debug模式下會彈出這麼一個對話方塊:然後就是crash了。在網上找了一下,發現已經有人對此作了詳細的介紹:"Pure Virtual Function Called": An Explanation.

如何給C++設計一個GC

和同事聊起了這個話題,下面是一些思考與問題:【思考】基本套路與Java應該是一致的,也就是Mark - Sweep - Compact:C++中可分為兩種類型:一是使用者自訂類型;一種是內建的類型。每次分配記憶體時候,都把記憶體位址儲存到一個hashmap中,key為記憶體位址,value為false。這是準備工作,然後在某個時間點需要做記憶體回收的時候:尋找以下三種使用者自訂類型的對象:全域的;靜態;當前棧上的,把這些對象作為根,然後遞迴尋找他們所引用的記憶體(成員),

發布一個 Linux 下的 C++ 多線程庫

發布一個我自己業餘時間編寫的 C++ 多線程庫 for Linux,這個庫只有不到 1000 行原始碼,封裝了 pthreads 的常用功能(互斥器、條件變數、線程),實現了簡單的線程池,並仿照 java concurrent 包編寫了 BlockingQueue 和 CountDownLatch。庫裡的每個 class 都提供了使用範例。這個庫的內容:整數的原子操作, AtomicInt32 和 AtomicInt64 線程,Thread 線程池,ThreadPool 互斥器與條件變數,

新書預告:《Linux 多線程服務端編程——使用 muduo C++ 網路程式庫》

看完了 W. Richard Stevens 的傳世經典《UNIX 網路編程》, 能照著例子用 Sockets API 編寫 echo 服務, 卻仍然對稍微複雜一點的網路編程任務感到無從下手? 書中範例程式碼把商務邏輯和 Sockets 調用混在一起,似乎不利於將來擴充?程式在本機測試正常,放到網路運行上就經常出現資料收不全的情況?TCP

C++ 工程實踐(8):值語義

陳碩 (giantchen_AT_gmail)http://blog.csdn.net/Solstice  http://weibo.com/giantchen陳碩關於 C++ 工程實踐的系列文章: http://blog.csdn.net/Solstice/category/802325.aspx排版正常的版本: http://www.cnblogs.com/Solstice/category/287661.html陳碩部落格文章合集下載:

C#多線程學習(六) 互斥對象載系列)——繼續搜尋引擎研究

如何控制好多個線程相互之間的聯絡,不產生衝突和重複,這需要用到互斥對象,即:System.Threading 命名空間中的 Mutex

C++ 工程實踐(9):資料抽象

陳碩 (giantchen_AT_gmail)http://blog.csdn.net/Solstice  http://weibo.com/giantchen陳碩關於 C++ 工程實踐的系列文章: http://blog.csdn.net/Solstice/category/802325.aspx排版正常的版本: http://www.cnblogs.com/Solstice/category/287661.html陳碩部落格文章合集下載:

如何提取網頁中所有連結(C++) 轉載

IE有幾個有用的介面,我們可以用它來提取網頁所有連結。 一、基本原理 首先是用IHTMLDocument2的get_links,來擷取IHTMLElementCollection介面,再通過IHTMLElementCollection來擷取IHTMLAnchorElement,而IHTMLAnchorElement介面的get_href就是我們想要的,通過迴圈擷取,我們就可以得到網頁的所有連結了! 二、具體代碼 CodeCode highlighting produced by Actipro

C#多線程學習(五) 多線程的自動管理(定時器) 載系列)——繼續搜尋引擎研究

Timer類:設定一個定時器,定時執行使用者指定的函數。              定時器啟動後,系統將自動建立一個新的線程,執行使用者指定的函數。初始化一個Timer對象: Timer timer = new Timer(timerDelegate, s,1000, 1000); // 第一個參數:指定了TimerCallback 委託,表示要執行的方法;// 第二個參數:一個包含回調方法要使用的資訊的對象,或者為空白引用;// 第三個參數:延遲時間——計時開始的時刻距現在的時間,單位是毫秒,

C#多線程學習(一) 多線程的相關概念載系列)——繼續搜尋引擎研究

什麼是進程?當一個程式開始運行時,它就是一個進程,進程包括運行中的程式和程式所使用到的記憶體和系統資源。而一個進程又是由多個線程所組成的。什麼是線程?線程是程式中的一個執行流,每個線程都有自己的專有寄存器(棧指標、程式計數器等),但代碼區是共用的,即不同的線程可以執行同樣的函數。什麼是多線程?多線程是指程式中包含多個執行流,即在一個程式中可以同時運行多個不同的線程來執行不同的任務,也就是說允許單個程式建立多個並存執行的線程來完成各自的任務。多線程的好處:可以提高CPU的利用率。在多線程程式中,一

C#多線程學習(二) 如何操縱一個線程 載系列)——繼續搜尋引擎研究

下面我們就動手來建立一個線程,使用Thread類建立線程時,只需提供線程入口即可。(線程入口使程式知道該讓這個線程幹什麼事)在C#中,線程入口是通過ThreadStart代理(delegate)來提供的,你可以把ThreadStart理解為一個函數指標,指向線程要執行的函數,當調用Thread.Start()方法後,線程就開始執行ThreadStart所代表或者說指向的函數。 開啟你的VS.net,建立一個控制台應用程式(Console

C# 線程傳參幾種方法載系列)——繼續搜尋引擎研究

我們在寫Remoting程式或者其他的一些應用程式的時候難免要和線程打交道,.Net使我們很容易就可以建立一個線程,但是它提供的建立線程和啟動線程的方法沒有明顯的提供參數,假如我們要用線程來啟動類裡面一個帶參數的方法該怎麼辦?下面就簡單的介紹如何使用.NET提供的豐富的架構來實現這個功能。為了可以生動詳細的介紹整個過程,我建立下面的一個.NET類,它也是要用線程啟動的方法的載體。類如下所示: CodeCode highlighting produced by Actipro

【原】借雞生蛋 C# 轉 VB 和 C# 轉 VB 【有源碼】

思路:類比資料提交,分析回傳資料,提取結果。我們先看這個網站,http://www.developerfusion.com/tools/convert/csharp-to-vb/  【Convertor】開啟 【Convertor】 的網站,使用firebug 或 httpwatch 分析出post

總頁數: 4314 1 .... 687 688 689 690 691 .... 4314 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.