c++ 知識加強

介紹typedef 好的文章  https://zhuanlan.zhihu.com/p/81221267 和 https://liam.page/2017/02/05/pointer-in-C-and-Cpp/

 

COM"自身是一個很複雜的概念,是微軟當時爲了讓Office能夠在辦公軟件當中勝出,所開發出來的一種技術。在Office當中使用的基於"COM"的技術主要有"OLE"和”DDE“。前者是嵌入式對象,就是我們可以把一個視頻、或者一個別的什麼原本Office當中不支持的文件,放到Office文檔當中。然後這個東西就會顯示爲一個圖標,或者是一個靜態的圖片(snapshot),雙擊這個圖標或者這個靜態的圖片就會啓動能夠支持這個格式的軟件對其進行播放或者編輯。這種播放或者編輯有兩種形式:一種是in place,就是直接在Office文檔當中進行,另一種是standalone,就是在Office之外進行。in place的時候,其實是在後臺啓動能夠支持這種格式的一個程序,但是隱藏其窗口。然後把Office當中的一小塊客戶區域(就是之前我們用過的Rect所定義的一個矩形區域)傳遞給這個後臺程序,讓其負責處理這塊區域的繪製和用戶輸入。也就是說,在Office程序的WM_PAINT事件的處理當中,將Office窗口的整個客戶區域分割爲由自己繪製的部分和由OLE繪製的部分,由OLE繪製的部分通過COM技術傳遞給後臺應用進行繪製。比如我們嵌入的OLE對象是一個視頻,那麼當你在Office文檔內播放這個視頻的時候,實際上後臺會啓動Windows Media Player,只不過它的界面是隱藏的。Windows Media Player對視頻進行解碼播放,只不過和平常不一樣的是,最後畫面不是畫在Windows Media Player自己的窗體上,而是畫在Office文檔當中的一塊矩形區域當中。

最常見的應用就是在PPT裏面放一個視頻,或者放一個Excel表格,Word文檔什麼的。這個其實就是用的"OLE"技術。

而”DDE“大部分和"OLE"類似,所不同的是這個對象是單獨存放在磁盤上,而不是嵌入到Office文檔當中進行保存的。我們將一個Excel拖入到PPT的時候,Office會問我們是作爲嵌入式對象,還是鏈接。嵌入式對象就是"OLE",而鏈接就是"DDE"。“DDE” 的特點是你可以隨時在外部編輯那個文件,而改變會自動反映到使用“DDE”鏈接進的那個文檔當中。也就是說,如果你用“鏈接”的方式把一個Excel放入PPT,那麼後面如果你修改了那個Excel,PPT裏面的那個Excel對象的數據也會跟着變。

除了這種應用,Windows服務,DirectX 3D當中所用的filter,.NET技術,IE Browser所用的插件,Office所用的插件,等等,都是基於"COM"技術。”COM“技術還有後繼的"COM+"技術以及在多個電腦上分佈式處理的”DCOM“(在Windows Server當中我們可以由一臺服務器部署管理其它服務器,就是靠着“DCOM”) 技術。

malloc /new 申請內存慢的原因

當我們調用malloc/new進行heap分配的時候,並不是我們的線程直接殺入內核,去領一塊內存出來。而是我們提交一個申領申請,放在放申請單的盒子裏,然後等。操作系統方面按順序處理這些申請,處理完了將處理結果放在處理結果盒子裏,然後叫我們的號讓我們去領。這個過程和我們在生活當中到特權機關去辦事很類似。

雖然這些系統API調用看起來都是同步的,但實際上這是一個異步操作,只不過在操作完成之前,我們的線程會被block住,操作完成了,線程unblock,函數返回,看起來就像普通函數調用那樣,其實這是一個比較複雜的過程。

而且在這個過程當中的參數傳遞,一般情況下都會發生拷貝。這是因爲操作系統和用戶程序分別工作在不同的地址空間,因此直接傳遞指針(地址)也是沒有什麼意義的。

因此,提高程序在CPU端的執行效率的一個重要手段,就是要減少系統調用。在程序初始化階段就一次申領所需的資源,然後自己內部進行分配管理,這就是一種常用的減少系統調用的方法。

 

 

 

 

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