Time of Update: 2018-12-04
單核處理器電腦系統框圖:以前的晶片集由兩塊晶片構成,稱為南橋和北橋,二者之間通過PCI互連。後來Intel用MCH(Memory Controller Hub)替換了北橋,用ICH(I/O Controller Hub)替換了南橋,二者之間用DMI(Direct Media Interface)串連。此外,主處理器與晶片集通過FSB(Front Side Bus)串連。處理器的功能模組圖以及指令在處理器內的基本執行步驟圖:根據處理器核的不同,Intel公司的處理器可分為兩種基本類型:l
Time of Update: 2018-12-04
前幾天在偵錯工具時發現一個bug,和對stringstream的不當使用有關,代碼如下:char number = 0;std::stringstream str_number;str_number << number;.....這段代碼的目標是把一個8位整數轉換成一個字串,但實際上不能達到這個效果。如果在轉換後加入列印資訊:std::cout << "the number is " << str_number.str() <<
Time of Update: 2018-12-04
終於讀完了這本厚書,雖然讀了後面忘了前面,但讀下來還是有點成就感的,而且我從中學到了好多東西。這本書又被稱作CLRS,是由四位作者名字的首字母組成。我學習這本書純屬偶然,去年和一個同事交流技術時,他向我推薦這本書,於是一時心血來潮,從網上買了一本,但是看到它的厚度,以及裡面所描述的內容,確實有一種令人望而生畏的感覺,感覺還不知道何年何月才能把這本書看完。還好,今年上半年因為比較空,因此得以抽出很多時間學習這本書,整體感覺整本書寫得相當的嚴謹,涉及到了廣泛的數學知識。書中的所有的演算法都可以用數學
Time of Update: 2018-12-04
所謂TDD,就是測試驅動開發。近期看了一些如何寫代碼的書,包括《修改代碼的藝術》,《代碼整潔之道》等,這些書都提到了TDD。我記得幾年以前在書店就開始看到關於極限編程的書,也偶爾聽到測試驅動開發的概念。大體的思想就是在實現一個功能時,先寫測試案例,再寫代碼,然後讓代碼
Time of Update: 2018-12-04
BUBBLESORT(A)1 for i ← 1 to length[A]2 do for j ← length[A] downto i + 13 do if A[j] < A[j - 1]4 then exchange A[j] A[j - 1] 1
Time of Update: 2018-12-04
用數學歸納法證明:首先對n=1時,對於二叉尋找樹,只有一個結點,也就是根結點,這時無法旋轉,因此有0(n-1)種可能的旋轉,命題成立。假設對於n=k(k>1)時,對於二叉尋找樹,有k-1種可能的旋轉。那麼對於n=k+1時,也就是我們在原來的二叉尋找樹中添加了一個結點,這個結點最終一定是二叉尋找樹的一個葉結點,其父結點一定存在(k>1),這個葉結點可能是其父結點的左子結點,也可能是其父結點的右子結點。如果是左子結點,那麼相對於原二叉尋找樹,增加了一個右旋操作;如果是右子結點,那麼增加了
Time of Update: 2018-12-04
在RB-DELETE中,當y是黑色時,會調用RB-DELETE-FIXUP函數對紅/黑樹狀結構的顏色進行調整,這意味著,如果y是紅色的,就不需要進行調整,下面來證明這個命題的正確性。 首先,紅/黑樹狀結構的性質1)和3)顯然滿足,對於性質2)、4)和5)分為3種情況來討論。 對於情況1),刪除的結點z的子結點只有黑色哨兵結點,這種情況下,y=z,刪除y不會對紅/黑樹狀結構的黑高度造成影響,y是紅色,也不可能是根,也不可能造成出現兩個紅色結點相鄰,因此,性質2)、4)和5)都滿足。 對於情況2),
Time of Update: 2018-12-04
ACE的線程同步的方法之一是使用條件變數,我原來對條件變數不大理解,主要原因是Windows 作業系統下並沒有直接與之對應的核心對象,而且條件變數需要和Mutex共同使用, 這個讓人一下子摸不著頭腦。經過反覆測試,又查看了ACE的原始碼, 我終於理解條件變數為什麼總是與Mutex混合使用了。 像以下這段範例程式碼: intHA_CommandHandler::svc (void){ ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%t)
Time of Update: 2018-12-04
二項樹Bk是一種遞迴定義的有序樹。二項樹B0隻包含一個結點。二項樹Bk由兩個子樹Bk-1串連而成:其中一棵樹的根是另一棵樹的根的最左孩子。二項樹Bk具有以下性質:1)共有2的k次方個結點;2)樹的高度為k;3)在深度i處恰有(上k,下i)(因此叫二項樹)個結點,其中i=0,...,k;4)根的度數為k,它大於任何其他結點的度數,並且,如果對根的子女從左至右編號為k-1,k-2,...,0,子女i是子樹Bi的根。證明:略,請參考《演算法導論》第十九章。 二項堆H由一組二項樹構成,但需要滿足下面兩個
Time of Update: 2018-12-04
《ACE程式員指南》中線程池一章中提到了兩個模式: 半同步半非同步模式和領導者和跟隨者模式,對於後者 書中給出了一個樣本程式,為了方便說明,我把範例程式碼貼在這裡: #include "ace/config-lite.h"#if defined (ACE_HAS_THREADS)#include "ace/OS_NS_string.h"#include "ace/OS_NS_sys_time.h"#include "ace/Task.h"#include
Time of Update: 2018-12-04
Pictrue Control實際上就是CStatic,它的動態建立過程如下:m_Static.Create(_T(""), WS_VISIBLE|WS_CHILD|SS_BITMAP|SS_CENTERIMAGE, CRect(200,200,300,300), this);HBITMAP hBitMap = ::LoadBitmap(AfxGetInstanceHandle(),
Time of Update: 2018-12-04
轉自:http://www.cnblogs.com/BlueTzar/articles/1223169.html建構函式初始化列表以一個冒號開始,接著是以逗號分隔的資料成員列表,每個資料成員後面跟一個放在括弧中的初始化式。例如:class CExample {public: int a; float b; //建構函式初始化列表 CExample(): a(0),b(8.8) {} //建構函式內部賦值 CExample() { a=
Time of Update: 2018-12-04
最近做FTP相關的東西,遇到各種轉換:1.utf-8與unicode的轉換:Unicode是定長,而utf-8是變長。轉換原理: U-00000000 - U-0000007F: 0xxxxxxx //以0開頭的為ASCII碼(<=0x7f)) U-00000080 - U-000007FF: 110xxxxx 10xxxxxx //開頭兩個“1”,表示有兩個位元組(16個二進位位), U-00000800 - U-0000FFFF: 1110xxxx
Time of Update: 2018-12-04
這是《演算法導論》(原書第二版)中第17章的一個習題(17.4-2)。分成三種情況討論:1)αi≥ 1/2這時表並沒有進行擴張或收縮,只是表中的項數少了1平攤代價^Ci=ci+Φi-Φi-1 =1 + (2 · numi - sizei) - (2 · numi-1 - sizei-1)= 1-2 =-12) 1/4<=αi < 1/2這時表並沒有進行擴張或收縮,除了表中的項數少了1,^Ci =ci+Φi-Φi-1 =1 + (sizei /2 - numi) - (2 ·
Time of Update: 2018-12-04
A B-tree T is a rooted tree (whose root is root[T]) having the following properties:1. Every node x has the following fields:a. n[x], the number of keys currently stored in node x,b. the n[x] keys themselves, stored in nondecreasing order, so
Time of Update: 2018-12-04
主要通過GDIPlus的Image類來載入圖片資源,使之支援bmp以外的圖片。GDIPlus的初始化方式網上都是用的如下方法:1、在stdafx.h中添加以下聲明://引入GDI+標頭檔 #include <GdiPlus.h> using namespace Gdiplus;#pragma comment(lib, "gdiplus.lib"
Time of Update: 2018-12-04
今天學習ACE的定時器,有個地方開始怎麼都不理解,現在終於搞清楚了, 現在總結一下: 1)ACE_Timer_Queue的gettimeofday函數,返回的是一個絕對時間值,它可以是當前的絕對時間,也可以不是。 2) ACE_Timer_Queue的calculate_timeout ( ACE_Time_Value * max )
Time of Update: 2018-12-04
《演算法導論》練習31.5-2x ≡ 1 (mod 9)x ≡ 2 (mod 8)x ≡ 3 (mod 7) 根據中國餘數定理,n=504a1 = 1, n1 = 9,m1 = 56,56-1≡ 5 (mod 9)a2 = 2, n2 = 8,m2 = 63,63-1≡ 7 (mod 8)a3 = 3, n3 = 7,m2 = 72,72-1≡ 4 (mod 7)c1 = 56(5 mod 9) = 280c2 = 63(7 mod 8) = 441c3 = 72(4 mod 7) = 288
Time of Update: 2018-12-04
我從去年開始學習ACE,當時從同事那裡借了這本《ACE程式員指南》,最開始看到這本書時,有點輕視的心態,在我印象中好像叫什麼什麼指南之類的書都是屬於比較簡單的入門書,所以大概翻了翻,就擱置不看了。今年年初,為了研究使用ACE進行多線程編程,我打算研究這本書中的幾個例子,在仔細閱讀相關章節後,我覺得這本書的內容非常豐富,值得仔細研究,最開始看書時,不知道有配套的源碼,閱讀支離破碎的程式片段,理解並不深刻,不過幸運的是,不久以後我在ACE發布的原始碼中,找到了這本書的配套程式,感覺就像發現了一個大寶
Time of Update: 2018-12-04
今天用ACE_OS::fopen函數遇到一個很隱形問題,我用ACE讀一個二進位檔案,然後把內容寫到另外一個檔案中,和原來的內容不一樣了,0A前面加了個0D。後來研究了ACE的原始碼,才把這個問題搞清楚,ACE_OS::fopen實際上封裝的是c函數庫的fopen函數,我寫二進位檔案,調用函數的代碼如下:ACE_OS::fopen(sFileName.c_str(),"at+");t表示文字格式設定的檔案,a+表示Opens for reading and appending; the