Time of Update: 2018-12-04
為什麼需要線程池目前的大多數網路伺服器,包括Web伺服器、Email伺服器以及資料庫伺服器等都具有一個共同點,就是單位時間內必須處理數目巨大的串連請求,但處理時間卻相對較短。傳統多線程方案中我們採用的伺服器模型則是一旦接受到請求之後,即建立一個新的線程,由該線程執行任務。任務執行完畢後,線程退出,這就是是“即時建立,即時銷毀”的策略。儘管與建立進程相比,建立線程的時間已經大大的縮短,但是如果提交給線程的任務是執行時間較短,而且執行次數極其頻繁,那麼伺服器將處於不停的建立線程,銷毀線程的狀態。我們
Time of Update: 2018-12-04
普通成員函數的調用 從這部分開始我們除了利用記憶體的資訊列印來進行探索外,更多的會通過跟蹤和觀察編譯器產生的彙編代碼來理解編譯器對這些語言特性的實現方式。彙編方面知識的討論超出了本文的範圍,我只對和我們討論相關的彙編代碼進行解析。理解本文要討論的知識並不需要有很完整的彙編知識,但必須瞭解起碼的概念。 下面我們看看引入虛繼承後的影響。為了有所對比我們首先看看普通成員函數的調用情況。 執行如下代碼,它包括了對象的普通成員函數調用,類的靜態成員函數調用、通過指標調用普通成員函數:C010
Time of Update: 2018-12-04
順序容器:vector: 支援快速隨機訪問;list:支援快速插入/刪除,類似與鏈表deque:爽端隊列。使用預設建構函式能達到最佳運行時效能,並使容器更易使用。將一個容器初始化為另一個容器的副本:vector<int> ivec;vecror<int>
Time of Update: 2018-12-04
看《編程之美》第二節的時候,它是定義的一個整型,然後取位。但是他的那個或運算子號好像寫錯了,寫成了異或符號“^”,應該是“|”。我就突然對二進位的輸出感興趣了。想知道怎樣輸出二進位。我們知道C++輸出十六進位是cout〈〈hex〈〈 a;而八進位是cout〈〈 ocx〈〈 a;二進位則沒有預設的輸出格式,需要自己寫函數進行轉換,於是上網搜尋了一下。網上思路真是廣泛啊。下面列出一些方法。 #include 〈iostream〉 #include 〈list〉
Time of Update: 2018-12-04
生存期和範圍,究竟有什麼樣的關係呢?先解釋一下生存期吧。一個進程對應的記憶體空間中,包含5種不同的資料區。按照記憶體中從低到高的順序,分別為:棧、堆、BSS段、資料區段和程式碼片段。棧:存放程式臨時建立的局部對象。一般VC++6.0產生的可執行檔只有1MiB多的棧。堆:存放進程運行中被動態分配的記憶體段。它大小並不固定,可動態擴張或縮減。屬於記憶體中最多的資源。BSS段:(它是block started by
Time of Update: 2018-12-04
原書這部分內容很多,至少相對於迴圈鏈表是很多。相信當你把單鏈表的指標域搞清楚後,這部分應該難不倒你。現在我的問題是,能不能從單鏈表派生出雙向鏈表?你可以有幾種做法:一種就是先定義一個雙鏈節點——但是,它的名字必須叫Node,這是沒辦法的事;不然你就只好拷貝一份單鏈表的實現檔案,把其中的Node全都替換成你的雙鏈節點名字,但是這就不叫繼承了。另一種做法就是先定義一種結構例如這樣的:template <class Type> class newtype{public:Type data;
Time of Update: 2018-12-04
C‧符號列表數學符號:符號說明範例+加號或正值a = 1 + 2;//結果 a = 3a = -5; b = +a;//結果 b = 5 -減號或負值a = 3 - 1;//結果 a = 2a = 5; b = -a;//結果 b = -5; *乘號a = 2 * 3;//結果 a = 6/除號a = 6 / 2;//結果 a = 3%餘數a = 7 % 2;//結果 a =
Time of Update: 2018-12-04
本文檔節選並整理自潘凱的《C++物件版面配置及多態實現的探索》系列。原文請參見 http://lunatic.bokee.com/1. 空類: class C000{}; // sizeof = 1它的大小為1位元組,這是一個預留位置,我們可以看到它的值是0xcc。在debug模式下,這表示是由編譯器插入的調試代碼所初始化的記憶體。在release模式下可能是個隨機值。這個位元組保證C000類的執行個體對象擁有不同的記憶體位址。&a!=&b。2.
Time of Update: 2018-12-04
之前搞過這個中英文與UNICODE十六進位字串的互轉,但是發現有點小問題。現在重新搞了一個,測試中暫時沒有發現什麼問題。先記錄下來。我嘗試使用過MultiByteToWideChar和WideCharToMultiByte來實現這個功能,但是發現不行。也就是無法實現如:中文English --> 4e2d65870045006e0067006c006900730068和4e2d65870045006e0067006c006900730068 --> 中文English這麼一個轉換,
Time of Update: 2018-12-04
作者:watercloud 首頁:http://www.nsfocus.com 日期:2002-4-15 目錄: 1. C++中虛函數的靜態聯編和動態聯編 2. VC中對象的空間組織和溢出實驗 3. GCC中對象的空間組織和溢出實驗 4. 參考<一> C++中虛函數的靜態聯編和動態聯編 C++中的一大法寶就是虛函數,簡單來說就是加virtual關鍵字定義的函數。 其特性就是支援動態聯編。現在C++開發的大型軟體中幾乎已經離不開虛函數的
Time of Update: 2018-12-04
loadbmp.h#include <stdio.h>#include <math.h>#include <time.h>#include <string.h>#include <stdlib.h>#define pi (double)3.14159265359#define BI_RGB 0#define BI_RLE8 1#define BI_RLE4 2#define BI_BITFIELDS 3typedef unsigned
Time of Update: 2018-12-04
編寫好驅動之後,另外寫了個C程式來測試驅動,但是在編譯的時候,出現了如下的錯誤:build/core/base_rules.mk:166: *** frameworks/base/opengl/libs: MODULE.TARGET.ETC.egl.cfg already defined by development/tools/emulator/opengl/system/egl。
Time of Update: 2018-12-04
1.pair在通用工具標頭檔中。#include <utility>pair可以將兩個值視為一個單元,C++ STL中多處使用了這個類。尤其容器類map,multimap,就是使用pairs來管理其鍵/值(key/value)的成對元素。任何函數想返回2個的值都可以使用pair。比如:#include <iostream>#include <utility>// pair 一對 資料 可用於 函數返回2個 資料using namespace
Time of Update: 2018-12-04
進程簡單的說就是把一段代碼複製成多份,並讓他們同時執行。處理序間通訊是為了讓他們有序的運行線程簡單的說就是讓多個函數同時執行,線程間通訊是為了讓他們有序的運行編譯線程程式時會警告說線程函數找不到 pthread 庫不是 Linux 系統預設的庫,串連時需要使用靜態庫 libpthread.a,所以在使用pthread_create()建立線程,以及調用 pthread_atfork()函數建立fork處理常式時,需要連結該庫。問題解決: 在編譯中要加 -lpthread參數 gcc
Time of Update: 2018-12-04
////////////////////////////////////////////////////////////////////以下是本人寫的關於求任意位二進位碼海明編碼的程式(C++環境運行)///////////////////////////////////////////////////////////////////#include <iostream>#include <fstream>#include <stdio.h>#define
Time of Update: 2018-12-04
C++ Template 的相關書籍 聊聊C++ Template的一些好書吧! 關於template一本很全面的介紹C++ Template的書在china-pub上可以找得到:http://www.china-pub.com/computers/common/info.asp?id=17709,也有中文翻譯版本(哈哈,剛才看了一下,英文版缺貨,中文版絕版,幸虧偶買的早)。 如果再配合看這本:《Modern C++ Design: Generic
Time of Update: 2018-12-04
Debug 通常稱為調試版本,它包含調試資訊,並且不作任何最佳化,便於程式員偵錯工具。Release 稱為發布版本,它往往是進行了各種最佳化,使得程式在代碼大小和運行速度上都是最優的,以便使用者很好地使用。 Debug 和 Release 的真正秘密,在於一組編譯選項。下面列出了分別針對二者的選項(當然除此之外還有其他一些,如/Fd /Fo,但區別並不重要,通常他們也不會引起 Release 版錯誤,在此不討論) Debug 版本: /MDd /MLd 或 /MTd 使用
Time of Update: 2018-12-04
P.J Plauger的"The Standard C Library"一書的Chapter0的章後練習中有這樣的一道題:編寫一個包含如下一行語句的正確的程式: x: ((struct x*)x)->x=x(5); 並描述這行語句中x的5種截然不同的use,這裡其實涉及到這麼一個知識或者說概念:C語言的命名空間(namespace),在"C語言參考手冊"中還被稱作: overloading class。 這 裡namespace,並非C++中的那個keyword
Time of Update: 2018-12-04
1. extern "C"是C++語言裡的關鍵字,C語言裡沒有。也就是說對於純C編譯器,它根本不認識extern "C",將導致編譯錯誤。 2. extern "C"的作用是使得C++編譯後的函數和變數名與C語言編譯後的名稱一致,也就是在其包含的範圍內對C和C++相容的函數和變數採用C的修飾機制。 3. extern "C"隻影響一般函數和變數,對於C++特有的類以及與類有關的成員函數的命名不受其影響。對象的名字受其影響,因為無論什麼類型的對象都是一般的變數。
Time of Update: 2018-12-04
轉自的部落格地址:http://blog.sina.com.cn/s/blog_79b802790100q8tt.html 終於體驗到在Linux下使用Asm 和 C的混合編寫產生-elf檔案。 在程式中的函數相互調用顯然使用的是堆棧進行。而中斷 int 0x80 卻沒搞清楚。可以明確的是這是個BIOS中斷可以實現多種功能,使用eax選擇功能,當eax=4時是螢幕輸出,ebx為輸出個數,ecx是字元長度,edx則為字元內容。參數的傳遞遵循後邊的參數先入棧 foo.asm