原创 內存池之一:基本概念

Wrote by mutouyun. (http://darkc.at/memory-pool-basic-concepts/)   1. 內存池是什麼 內存池(Memory Pool),是內存分配器(Memory Alloca

原创 C++設計模式之Builder(建造者)模式

我們可能會遇到這種情況,比如一個配置文件讀取模塊,它由幾個小模塊組成,每個小模塊負責讀取一種類型的配置.我們讀取配置的順序和過程是固定的,但是每個配置類型可能會因爲業務的需求發生很多變化. 這個過程和造房子有點像.每棟樓的建造過程是差不多

原创 UTF-8、UTF-16、UTF-32編碼的相互轉換

最近在考慮寫一個可以跨平臺的通用字符串類,首先需要搞定的就是編碼轉換問題。 vs默認保存代碼文件,使用的是本地code(中文即GBK,日文即Shift-JIS),也可以使用帶BOM的UTF-8。 gcc則是UTF-8,有無BOM均可(

原创 C++設計模式之Prototype(原型)模式

當我們需要創建一種類型的對象時,可以用工廠模式;當對象的局部容易發生變化時,我們有建造者模式.但當我們有大量的對象類型,或者對象類型不易知道時,我們如何根據已有的一個對象快速構建新的對象呢? 我們需要一個可以封裝掉不同種類對象之間的區別,

原创 nixyx —— 一個小巧的項目工程/編譯文件生成器(構建系統?)

恩。。nixyx確實算不上是一個構建系統。 所謂構建系統,比如GNU的Autotools,那是一套很完整的構建體系,包括了程序的配置,編譯和安裝三大部分。 類似的軟件還有:google的gyp、騰訊的Blade等。它們最大的好處在於,可以

原创 New web site...

技術博客移步至: darkc.at

原创 C++設計模式之Factory(工廠)模式

工廠模式一般是學習設計模式的第一課,它本身也是創建型模式中較爲常用的一種模式. 工廠模式希望解決的是"如何高效而方便的創建當前需要的對象"的問題.當一個對象對外提供的接口穩定,而這類對象的具體實現容易發生變化時,我們可以考慮使用工廠來封裝

原创 用mingw靜態編譯Qt4.8.2和Qt5.1.1

因爲一些亂七八糟的原因,我需要用mingw靜態編譯Qt4.8.2和Qt5.1.1。 經歷了一天的折騰之後,自覺編譯一下Qt還是件頗爲麻煩的事情,故將過程略作總結,以備不時之需。 首先,在編譯之前,我需要下載mingw、qt-everyw

原创 關於設計模式的7種壞味道和11種原則

設計模式作爲一組抽象的設計思想,肯定有一些基本的原則.否則的話,任何設計都可以稱之爲"良好設計"的一種了. 在設計模式中,也有整體"不允許"和"需要遵循"的方方面面.只要遵循了下面這些基本思想,寫出來的設計往往都是很優秀的設計. 7

原创 高斯模糊算法的實現和優化

前兩年我發過一文:Win32下的C++高斯模糊算法實例,裏面給出了一個高斯模糊的實現,並寫了粗略的簡介。 不過當時內容講得非常簡單,而且附帶的例子算法是有缺陷的: 一是對圖片的邊角採用“跳過”的方式處理,導致模糊後的圖片有黑邊;二是算法本

原创 跨平臺的原子操作及簡單的循環鎖實現

原子操作一直是多線程編程中的重要殺器之一。Win32裏我們有Interlocked系列API,其他平臺下也有各自的原子操作接口。如果想要讓我們的程序能夠擁有跨平臺且統一的多線程調度方案,那麼就必須得把不同的操作接口統一(C++11中已經有

原创 C++的雜七雜八:我家的返回值纔不可能這麼傲嬌(右值引用和移動語義)

大凡編程語言,都會有“函數”這個概念。而對於外部而言,一個函數最重要的部分就是它的返回值了。 說這裏,返回值其實應該是一個很簡單的話題。當需要通過函數傳遞一個值出去的時候,使用返回值不是理所當然的嘛,比如說,像下面這樣: int add

原创 關於內存對齊的那些事

Wrote by mutouyun. (http://darkc.at/about-data-structure-alignment/) 1. 內存對齊(Data Structure Alignment)是什麼 內存對齊,或者說

原创 C++ 下 typeof 的實現

現在我們有這樣一坨代碼: std::vector<int> arr; // ... for(std::vector<int>::iterator iter = arr.begin(); iter != arr.end(); ++ite

原创 一段tricky code

Wrote by mutouyun. (http://darkc.at/a-tricky-code/) 剛剛在網上閒逛,看到reddit上關於最受歡迎的代碼的討論貼,上面有一小段非常有意思的代碼: unsigned int v;