原创 可重入與不可重入

在多線程編程和信號處理過程中,經常會遇到可重入(reentrance)與線程安全(thread-safe)。 很多人糾結於reentrance和thread-safe兩個概念理解糾纏不清。我想救我對reentrance和thread-sa

原创 類模板與模板類

      什麼是類模板      一個類模板(也稱爲類屬類或類生成類)允許用戶爲類定義一種模式,使得類中的某些數據成員、默寫成員函數的參數、某些成員函數的返回值,能夠取任意類型(包括系統預定義的和用戶自定義的)。如果一個類中數據成員的數

原创 字符集GBK和UTF8的區別

GBK就是在保存你的帖子的時候,一個漢字佔用兩個字節。外國人看會出現亂碼,此爲我中華爲自己漢字編碼而形成之解決方案。 UTF8就是在保存你的帖子的時候,一個漢字佔用3個字節。但是外國人看的話不會亂碼,此爲西人爲了解決多字節字符而形成之解決

原创 select,poll,epoll的區別

當需要讀兩個以上的I/O的時候,如果使用阻塞式的I/O,那麼可能長時間的阻塞在一個描述符上面,另外的描述符雖然有數據但是不能讀出來,這樣實時性不能滿足要求,大概的解決方案有以下幾種: 1.使用多進程或者多線程,但是這種方法會造成程序的

原创 map::erase的使用

int main(int argc, char* argv[]) { map<string, string> mapData; mapData["a"] = "aaa"; mapData["b"] =

原创 malloc與calloc的區別

        區別就是是否對申請的區域進行初始化。      calloc雖然對內存進行了初始化(全部初始化爲0),但是同樣也要降低效率的 calloc相當於:      p = malloc();  

原创 C++前向聲明

前向聲明的定義:有些時候我們可以聲明一些類但是並不去定義它,當然這個類的作用也很有限了。 比如class foo; 聲明一個foo類,這個聲明,有時候也叫做前向聲明(forward declaration),在聲明完這個foo類之後

原创 經典排序算法複習總結

前置定義: In-place sort(不佔用額外內存或佔用常數的內存):插入排序、選擇排序、冒泡排序、堆排序、快速排序。 Out-place sort:歸併排序、計數排序、基數排序、桶排序。 stable sort:插入排序、冒泡

原创 阻塞/非阻塞 & 同步/異步

老張愛喝茶,廢話不說,煮開水。出場人物:老張,水壺兩把(普通水壺,簡稱水壺;會響的水壺,簡稱響水壺)。1 老張把水壺放到火上,立等水開。(同步阻塞)老張覺得自己有點傻2 老張把水壺放到火上,去客廳看電視,時不時去廚房看看水開沒有。(同步非

原创 C++namespace

namespace中文意思是命名空間或者叫名字空間,傳統的C++只有一個全局的namespace,但是由於現在的程序的規模越來越大,程序的分工越來越細,全局作用域變得越來越擁擠,每個人都可能使用相同的名字來實現不同的庫,於是程序員在合併程

原创 c語言數據結構補齊原則

[cpp] view plaincopy /*        原則1、數據成員對齊規則:結構(struct或聯合union)的數據成員,第一個數據成員放在offset爲0的地方,以後每個數據成員存儲的起始位置要從該成員大小

原创 Linux硬鏈接與軟鏈接

硬鏈接是給文件一個副本,同時建立兩者之間的關係。修改其中一個,與其連接的文件會被同時修改。如果刪除其中任意一個則其他文件不會被影響。 軟鏈接也叫符號連接,它只要對源文件在新的位置建立一個”快捷方式“,所以,當源文件刪除之後,符號連接的文件

原创 CGI環境變量

環境變量  意義 SERVER_NAME   CGI腳本運行時的主機名和IP地址. SERVER_SOFTWARE   你的服務器的類型如: CERN/3.0 或 NCSA/1.3. GATEWAY_INTERFACE   運行

原创 C++內聯函數一個重要的point

內聯函數與其他普通函數的區別是,內聯函數在生成可執行文件時,其代碼塊是直接嵌入到調用處的,以此減少函數調用的開銷提高程序性能,它與宏很類似。 但是,根據名著《C++ primer》:內聯說明(inline specification)對於

原创 C/C++如何讓類對象只在棧(堆)上分配空間?

在C++中,類的對象建立分爲兩種,一種是靜態建立,如A a;另一種是動態建立,如A* ptr=new A;這兩種方式是有區別的。 1、靜態建立類對象:是由編譯器爲對象在棧空間中分配內存,是通過直接移動棧頂指針,挪出適當的空間,然後在這