Time of Update: 2018-12-04
volatile在Andrei Alexandrescu的文章《volatile - Multithreaded Programmer's Best Friend》[2]開頭有如下簡要描述:The volatile keyword was devised to prevent compiler optimizations that might render code incorrect in the presence of certain asynchronous events. For
Time of Update: 2018-12-04
多線程編程需面臨的問題總結:1)安全的資料共用(通訊)問題。 同時一方寫,一方讀 同時一個寫,多個讀
Time of Update: 2018-12-04
中位元即是排過序後的處於數組最中間的元素。 不考慮數組長度為偶數的情況。設集合元素個數為n。簡單的想了下:思路1) 把無序數組排好序,取出中間的元素 時間複雜度 採用普通的比較排序法 O(N*logN) 如果採用非比較的計數排序等方法, 時間複雜度 O(N), 空間複雜度也是O(N).思路2) 2.1)將前(n+1)/2個元素調整為一個小頂堆,
Time of Update: 2018-12-04
0:如何在樣式裡面搞出來多級編號 1, 1.1, 1.1.1, 1.1.1.1 ? 並且保證不會出現如下結果 1 1.1 2 1.2 // 這裡本應該是2.1方法: 1)建立一個word文檔, 那麼會出現 標題1 標題2 標題3 三個預設樣式. 2)修改標題1, 多級編號, 隨便選擇一個多級編號, 然後自訂, 然後進階 這裡很關鍵了: 對於第1級, 編號格式:1, 將層級連結到樣式 標題1 對於第2級, 編號格式:1.1, 將層級連結到樣式 標題2
Time of Update: 2018-12-04
原文地址 http://sudu.cn/info/html/edu/code/20070102/294464.html 理解調用棧最重要的兩點是:棧的結構,EBP寄存器的作用。右側的紅色部分,寫出了引發棧結構變化的對應的指令+| (棧底方向,高位地址) || ....................|| ....................| // call somefun(...)-->修改esp,棧向下增長,參數入棧,傳回值入棧|
Time of Update: 2018-12-04
1: 初始化效率要高效。 所有的成員變數初始化通過 初始化列表實現。 如果放在類的建構函式裡面初始化,效率會低! 因為:在進入類的建構函式之前,類必須是一個已經構造好的類了!也就是,其內部成員變數也已經被構造好了。也就是進入建構函式之前所有的內部成員變數都已經執行了參數為空白的構造(假設沒有用初始化列表)。 如果你實現了建構函式,那麼編譯器會產生調用建構函式的代碼,這裡的代碼已經不是構造了,變成了修改! m_classB = _B; //
Time of Update: 2018-12-04
1-什麼時候會用到拷貝建構函式? 2-什麼時候有必要手動寫拷貝建構函式?1-什麼時候會用到拷貝建構函式? 當任何你想複印東西的時候,而不管東西被複印成什麼樣子。即任何你想利用一個已有的類執行個體給另一個類執行個體賦值時,這種賦值可能是顯式的,也可能是隱式的顯式:classa_1=class_2;隱式:函數的形參有用到類對象卻沒有用引用或傳址技術時
Time of Update: 2018-12-04
如何手工抓取dump檔案在生產環境下進行故障診斷時,為了不終止正在啟動並執行服務或應用程式,有兩種方式可以對正在啟動並執行服務或應用程式的進程進行分析和調試。首先一種比較直觀簡潔的方式就是用WinDbg等調試器直接attach到需要調試的進程,調試完畢之後再detach即可。但是這種方式有個缺點就是執行debugger命令時必須先break這個進程,執行完debug命令之後又得趕緊F5讓他繼續運行,因為被你break住的時候意味著整個進程也已經被你掛起。另外也經常會由於First
Time of Update: 2018-12-04
這個問題是windows開發面試中最經常問到得問題,也是很有深度的一個問題。有兩個文章對該問題討論的比較深刻:http://topic.csdn.net/u/20090822/16/4cf5d189-0e5e-41ff-9ba3-c7eaf2f6da74.htmlhttp://topic.csdn.net/u/20090316/22/8b067591-6a17-4970-b224-41ab589294b3.html說法一:虛函數實現佔用記憶體較大
Time of Update: 2018-12-04
《Effective C++》中的條款10 如果寫了operator new就要同時寫operator delete 一節 給出了一個很精妙的例子。給出了一個最簡單的記憶體池的模型。讀起來讓人真感覺的舒服。。。實現方法就是 類中重載了operate new, delete 操作符。申請大記憶體,切分成小記憶體,依靠鏈表的形式組織起來。。反覆利用。。貌似沒有處理記憶體不夠用時的動態增長記憶體的情況。上代碼:// 類定義class airplane { // 修改後的類 —
Time of Update: 2018-12-04
CreateThread, 會返回線程控制代碼, 同時, 傳遞的參數會給線程ID賦值.昨日讀了 windows 多線程程式設計. 知道了線程控制代碼和線程ID的區別.線程ID: 我目前已知的有一個用途: 向一個線程投遞訊息.線程控制代碼: 基本上, 所有操作線程的windowsAPI均使用線程控制代碼.每多一個控制代碼, 線程對象就多一個引用計數, 當引用計數為0時, 線程對象將被系統回收.一個線程對象可以有很多個控制代碼指向它.我們經常看到這樣的代碼: HANDLE hThrd =
Time of Update: 2018-12-04
Linux核心雜湊表分析與應用http://blog.csdn.net/tigerjb/article/details/8450995深入分析 Linux
Time of Update: 2018-12-04
http://blog.csdn.net/cglover/archive/2007/06/01/1634300.aspxdirectx中丟失的裝置(lost
Time of Update: 2018-12-04
“源檔案與模組產生時的檔案不同。仍要讓調試器使用它嗎?” “沒有可用於當前位置的原始碼”這個vc2005的bug吧最後我還是想辦法解決了這個問題,方法是先取消“Require source files to exactly match the original version”選項,然後修改一下程式,再在該檔案設斷點調試一下,然後重新選定“Require source files to
Time of Update: 2018-12-04
發生這樣的錯誤可能的原因有如下幾種:1)函數呼叫慣例不一樣。用cdecl約定調用了Pascal的函數,或倒過來。2)Dll中遇到的問題。dll更新了,但是相應的exe或別的dll的使用方沒有更新。(此問題又稱dll地獄問題) 比如,我的xEyeList的虛函數去掉了一個,xEyeList.dll更新了。xeyez.exe沒有使用xEyeList的標頭檔經過重新編譯,就出現這個崩潰。Run-Time Check Failure #0 - The value of ESP was not
Time of Update: 2018-12-04
答案是:My Code少了一個 “;”=====================================現場:回到 報錯的那一行,發現沒有問題。 報錯的檔案:ptlogin2_api.h(22行):expected unqualified-id before string constant 在我的一個cpp的 代碼中間(絕對不是在標頭檔),使用了這個檔案 ptlogin2_api.h 裡面的 一個函數 xxx, #ifdef __cplusplusextern "C" {========
Time of Update: 2018-12-04
這個問題真是奇怪, 明明CreateWindowEx失敗了, 卻, 緊跟著GetLastError卻返回0說成功. fuck widnows!其實建立視窗失敗是因為, 我們註冊的視窗處理函數裡面 沒有處理 WM_CREATE 等幾個視窗剛建立的時候發送給視窗的幾個訊息, 在視窗處理函數裡面調用 DefWindowProc()
Time of Update: 2018-12-04
問題描述:我的dialog使用了雙緩衝, 我的自繪button類也使用了雙緩衝. 但是仍然會閃爍.我的dialog以每秒一次的頻率重新整理. 發現, dialog不閃, 反倒是dialog內部的按鈕閃了起來.分析:由於父視窗和button都使用了雙緩衝, 所以, 其本身不會出現閃爍.問題可能在於:但是, 由於父視窗和子視窗不是同時畫的, 畫完不視窗, 再畫子視窗, 就會出現閃爍了!!!解決:給dialog加上 WS_CLIPCHILDREN .這樣, 父視窗重畫的時候,
Time of Update: 2018-12-04
這樣想,任何一個數,換成二進位都是由bit位組成了,如果能隨機的得到每一個bit的值,那麼整個數也就是一個隨機的大數了。 已知 int rand01() 返回0,1的隨機數. 求產生rand0_7之間的隨機數int rand01(){ return rand() & 0x1; // rand()是c語言提供的隨機函數。}// 4bit// 返回0~15之間的隨機數int rand0_15(){ return (rand01()<<3) + (rand01()<&
Time of Update: 2018-12-04
兩個都是glibc擷取時間的函數, gettimeofday支援返回微妙的精度, time返回秒的精度, 在效能上有差別嗎? 基本上沒有效能差別, 因為time其實就是把gettimeofday封裝了一層. 但是測試過程中發現 time比gettimeofday效能好了一點點, 可能是time函數的介面形式簡單吧, 堆棧處理的快.測試程式:#include <time.h>#include "ctimer.h"int foo(int i){ return