近段時間工作彙總

  也有好久沒來寫博客了,去了深圳一趟,把檔案問題解決好了,接下來就可以安心研究技術的階段。

  這幾天主要都是在練手,寫代碼的能力還要繼續加強,打好寫代碼的基礎纔是王道,做技術,很大的一個區別就在於你願不願意動手,若是眼高手低,懶而不動,等於浮沙築高臺,沒有實踐的經驗,怎能做到在開發中構建宏偉藍圖並付諸實現呢?

   技術方面,前段時間做了一個在Web上實時播放視頻流並配置編碼器的activex控件,覺得activex技術不錯,但是搞得過於複雜。尤其是在用MFC做的時候,非常痛苦。.net是個好東西,但是那東西你不可能放到嵌入式平臺上做。所以對於嵌入式設備,還是隻有activex技術可用。界面是一大麻煩,處理界面是繁瑣無趣的,尤其是沒有一個完整設計的情況下。

   好在ATL中有一個DHTML控件,所以我就想,難道不能用HTML+CSS+Javascript來做界面,然後通過javascript來進行與C++ handler的交互嗎?試驗了一番,此計可行。相信很多公司也都是這麼做的,directUI技術與此類似,但是我覺得directUI貌似一直也沒怎麼火起來,亦或是directUI都被作爲技術機密隱藏了起來,不是很瞭解。

   今天看了一下,一個只有非靜態,非虛成員函數的C++類的大小是多少?經過GCC與VC測試,大小都爲1.爲什麼?首先是因爲類的非靜態非虛成員函數是不在類的內存結構中的,非靜態非虛成員函數void class::func(int)實際上是func(class& obj,int),所以整個類就可以認爲是一個空類。而空類的實例爲了保證在內存中是獨一無二的,編譯器就會爲空類加上一個隱含的字節。這就是爲什麼最後得到的值是1.

    這樣就好理解爲什麼不提倡虛函數了,虛函數的地址保存是由vptr指向的虛表中。而非靜態非虛成員函數實質上是一個固定地址的函數。當調用虛函數的時候,還要經過查表這一步,就要首先通過vptr獲得vtable,再去調用虛函數。在彙編中就要多了幾步:

1.獲取vptr

2.獲取vtable

3.從vtable中獲取到實際調用的函數的地址

4.jmp到指定的地址

    在現在的處理器的架構下,一般都採用多級流水線,調用虛函數的操作會導致流水線鎖定。效率到底會損失多少?有一篇比較詳細且有詳實比較數據的文章,可於這裏查看:

http://blog.csdn.net/hengyunabc/article/details/7461919

    指針與引用的區別:我覺得指針與引用的區別可以參考指針與數組的區別。引用也是代表的一塊內存區域,它可以轉爲指針,但是它不是指針。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章