Time of Update: 2018-12-04
同一句語句或運算式如果使用了多種類型的變數和常量(類型混用),C 會自動把它們轉換成同一種類型。以下是自動類型轉換的基本規則: 1. 在運算式中,char 和 short 類型的值,無論有符號還是無符號,都會自動轉換成 int 或者 unsignedint(如果 short 的大小和 int 一樣,unsigned short 的表示範圍就大於 int,在這種情況下,unsignedshort 被轉換成 unsigned
Time of Update: 2018-12-04
本文用經典的生產者消費者的例子,說明Mnitor對象的用法。實現的目標是:生產者生產一個資料,然後消費者開始消費,消費完成後生產者繼續生產,迴圈10次後結束。下面是代碼: namespace ConsoleTest { /// <summary> /// 生產者消費者例子 /// </summary> public class Producer_Consumer { /// <summary> //
Time of Update: 2018-12-04
ManualResetEvent和AutoResetEvent在C#中用法比較類似,都是用來做線程式控制制的,這個從他們的名字也可以看出。先說相似點,他們都有對象方法:Set、Reset、WaitOne,用法類似,其中:Set表示設定為有訊號狀態,這時調用WaitOne的線程將繼續執行;Reset表示設定為無訊號狀態,這時調用WaitOne的線程將阻塞;WaitOne表示在無訊號狀態時阻塞當前線程,也就是說WaitOne只有在無訊號狀態下才會阻塞線程。再說說不同點,“Manual”表示手動的,“
Time of Update: 2018-12-04
C#中Dispose和Close的區別!當我們開發C#代碼的時候,經常碰到一個問題,有些class提供Close(),有些class提供Dispose(),那麼Dispose和Close到底有什麼區別?首先,Dispose和Close基本上應該是一樣的。Close是為了那些不熟悉Dispose的開發人員設計的。因為基本上所有的developer都知道Close是幹嗎的(特別是對於那些有C++背景的developer)。但是當我們寫code時候,如果要實現Close和Dispose的時候,要注意C
Time of Update: 2018-12-04
如果真正使用libvirt c語言動態連結程式庫進行編程要安裝libvirt的安裝檔案下載libvirt-0.9.0-tar.gz,解壓該檔案:tar zxvflibvirt-0.9.0.tar.gz.解壓完成後進入到檔案夾libvirt-0.9.0開始安裝1、./configure2、 此時提示缺少libxml2,因此需要安裝libxml2.sudo apt-get install libxml2libxml2-dev 附:如果手動安裝,:ftp://xmlsoft.org/libxml2/
Time of Update: 2018-12-04
參考 include/zookeeper.hWatches1)Zookeeper 所有的讀操作——getData(), getChildren(), 和 exists() 都 可以設定監視(watch),監視事件可以理解為一次性的觸發器2)用戶端只有首先看到了監視事件後,才會感知到它所設定監視的 znode 發生了變化3)資料監視和子節點監視(data watches and child watches) getData() and exists() 設定資料監視,getChildren()
Time of Update: 2018-12-04
原文地址:【CUDA學習-原創】包含C和.cu的工程實現!作者:又束起黑色領帶現有一純C的工程,想在裡面調用.cu檔案的函數。Project裡面有一個cppIntegeration的例子,不過這個是在CPP裡面調用.cu裡面的函數,而且,這個工程在sdk裡面,很多標頭檔,庫之類的直接引用,因此,可移植性很差。摸索了幾天,終於解決了C工程調用CU檔案的問題。一起分享一下~~~ 建立兩個檔案,A.cu和A_kernel.cu,其中,A.cu作為調用的介面,A_kernel.cu裡面實現的功能函數。然
Time of Update: 2018-12-04
前期blog請點擊 《深度探索C++物件模型》侯捷譯——筆記(一) 即使父類的解構函式設定為虛函數,那麼當父類指標指向子類對象的時候,也有不能夠正確析構的情況。比如Point* ptr = new Point3d[10];六、執行期語意學該章節三個知識點比較重要:第一對象的構造和析構,第二new和delete運算子
Time of Update: 2018-12-04
volatile關鍵字是一種類型修飾符,用它聲明的類型變數表示可以被某些編譯器未知的因素更改,比如:作業系統、硬體或者其它線程等。遇到這個關鍵字聲明的變數,編譯器對訪問該變數的代碼就不再進行最佳化,從而可以提供對特殊地址的穩定訪問。 a)用volatile關鍵字聲明的變數volatile int i; 每一次被訪問時,執行組件都會從i相應的記憶體單元中取出i的值。 b)沒有用volatile關鍵字聲明的變數int
Time of Update: 2018-12-04
看了這一章後發現:原來最難搞懂的是拷貝建構函式。2.1預設建構函式. C++標準是這麼說的:對於class X,如果沒有任何user-decleared-constructor,那麼會有一個default constructor被暗中(implicitly)聲明出來。。。。一個被暗中聲明出來的default constructor將是一個trival(無用的) constructor。 如果class X的成員屬性帶有建構函式,那麼無論如何class
Time of Update: 2018-12-04
轉摘自:http://topic.csdn.net/u/20090306/09/5ec55bdc-f2a9-4048-88b4-63616069df31.html堆和棧的區別(轉貼,作者為一c++程式員,具體姓名不清楚) 一、預備知識—程式的記憶體配置 一個由c/C++編譯的程式佔用的記憶體分為以下幾個部分 1、棧區(stack)—> 由編譯器自動分配釋放,存放函數的參數值,局部變數的值等。其操作方式類似於資料結構中的棧。 2、堆區(heap)—>
Time of Update: 2018-12-04
工作中自己用C#寫了專門讀寫EXCEL(不需要OFFICE環境,直接讀原始檔案,速度快)的COM組件,在使用過程中,發現原先的註冊程式是有問題的。網上也有同樣的網友碰到這個問題,但都沒找到合適的解決辦法。現在我把問題和解決方案都寫出來,供讀者參考。 其實問題都是出在COM組件的註冊上,根本的原因就是REGASM /u 命令有些時候是無效的! 我這邊提供的註冊過程是先卸載,然後註冊。原先的註冊過程是: (1) regasm /u XLSRW.dll (2)
Time of Update: 2018-12-04
入門級:Ptypes Ptypes一個開源輕量級的c++庫,包括對一些I/O操作、網路通訊、多線程和異常處理的封裝。雖然代碼有限,包括的內容不少,麻雀雖小,五髒俱全。 提高:STL Boost和STL ACE Boost庫是一個可移植、提供原始碼的C++庫,作為標準庫的後備,是C++標準化進程的發動機之一。
Time of Update: 2018-12-04
以下為測試環境:gcc 4.3.2-1-1GNU/Linux Debian 5.0(剛開始使用csdn部落格,沒經驗。由於中間調試時間較長,忘了備份,剛寫完,趕緊發了。一看,沒有;再看,還是沒有。揮去憤怒,重寫一篇。望讀者以此為鑒,及時備份。:-)1、extern與staticextern
Time of Update: 2018-12-04
1、結構體就是一個可以包含不同資料類型的一個結構,它是一種可以自己定義的資料類型,它的特點和數組主要有兩點不同:首先結構體可以在一個結構中聲明不同的資料類型,;第二相同結構的結構體變數是可以相互賦值的,而數組是做不到的,因為數組是單一資料類型的資料集合,它本身不是資料類型(而結構體是),數組名稱可看作常量指標,所以不可以做為左值進行運算,所以數組之間就不能通過數組名稱相互複製了,即使資料類型和數組大小完全相同。由於結構體本身就是自訂的資料類型,定義結構體變數的方法和定義普通變數的方法一樣。
Time of Update: 2018-12-04
昨天被問了個很基礎的C語言的問題。寫出u8 * memcpy(u8 * src, u8 * dst, size_t len)的定義。比較緊張,以為要考慮很多東西;於是,將很多亂七八糟的情況考慮了下。一般寫成void *,強制轉換成8bit的類型。事實上,由於這裡使用unsigned
Time of Update: 2018-12-04
被問到如下問題:給定一個結構體中某個變數地址,可否得到結構體變數的地址?答案是可以,但是對不同的場合有不同的結果;這與微處理器平台、編譯器的處理不可分割。首先,對於處理器,大尾端、小尾端的因素必須考慮;其次:一、ANSIC標準中並沒有規定,相鄰聲明的變數在記憶體中一定要相鄰。為了程式的高效性,記憶體對齊問題由編譯器自行靈活處理,這樣導致相鄰的變數之間可能會有一些填充位元組。對於基礎資料型別 (Elementary Data Type)(int
Time of Update: 2018-12-04
看到一個比較初級的問題,4個欄位的ip,如何排序?分析:排序是按每個欄位的整數值進行,而整個ip地址是字串型,故需要逐個欄位讀取。注意到每個欄位0~255,可以用一個位元組表示,而要比較大小,故用unsigned char型。讀取後,最自然的想法是逐個欄位比較,依次比較4個欄位,這個可以分別對每個欄位調用排序。想到基數排序的原理,不妨以256作為基數實施基數排序。想到這裡,既然有這麼個特殊數字256,我們的欄位都是模256的餘數,可以將所有欄位按照所在位置乘以256的對應次冪;這樣得到一個整數,
Time of Update: 2018-12-04
”c++三人談“中看到惡魔曾經指出c++的編程範式可以分為ADT+PP,GP,OO三個方向。1、ADT+PPADT:abstract data type; 抽象資料類型 PP:procedure programme; 面向過程的編程範式 ADT+PP 就是說面向過程的編程範式+抽象資料類型,你可以理解為c++的前身:帶類的C。2、GPGP:泛型程式設計,GP(Generic
Time of Update: 2018-12-04
昨天被問到了尾遞迴及編譯器對它的處理相關,一直對它沒有研究過,解釋得很含糊。回來查了下,記錄如下:遞迴有線性遞迴(普通的遞迴)和尾遞迴。由於尾遞迴的特殊性,一般的編譯器會做些特殊處理。因此,在效率和開銷上,比普通遞迴好。舉個例子,計算n!1)線性遞迴:type recurve(long n){ return (n == 1) ? 1 : n * recurve(n - 1); }2)尾遞迴:type recurve_tail(long n, long result){