一、函數函數的引入可以減少程序的目標代碼,實現程序代碼的共享。但是,函數調用也需要一些時間和空間方面的開銷,因為調用函數實際上將程序執行流程轉移到被調函數中,被調函數的程序代碼執行完后,再返回到調用的地方。這種調用操作要求調用前保護現場并記憶執行的地址,返回后恢復現場,并按原來保存的地址繼續執行。對于較長的函數這種開銷可以忽略不計,但是對于一些函數體代碼很短,但又被頻繁地調用的函數,就不能忽視這種開銷。引入內聯函數和宏函數正是為了解決這個問題,提高程序的運行效率。 在程序編譯時,編譯器將程序中出現的內聯函數(宏函數)的調用表達式用內聯函數(宏函數)的函數體來進行替換。由于在編譯時將函數體中的代碼替代到程序中,因此會增加目標程序代碼量,進而增加空間開銷,而在時間開銷上不象函數調用時那么大,可見它是以目標代碼的增加為代價來換取時間的節省。在類靜態數據成員不同于非靜態的數據成員,一個類的靜態數據成員僅創建和初始化一次,且在程序開始執行的時候創建,然后被該類的所有對象共享;而非靜態的數據成員則隨著對象的創建而多次創建和初始化; static成員是放在靜態存儲區的,它并不受訪問控制符的限制,而其它的成員變量則是放在棧中的。二、使用方面1:windows的回調函數使用靜態函數:在類中,static型的成員函數,由于是類所擁有的,而不是具體對象所有的,這一點對于windows的回調機制非常有用。因為對于回調函數而言,windows不會借助任何對象去調用它,也就不會傳遞this指針,那么對于一般成員函數作為回調函數的后果,就是堆棧中有一個隨機的變量會成為this指針,這當然會引發程序的崩潰。而static函數,由于是整個類的,屏蔽了this指針。因此,如果成員函數作為回調函數,就應該用static去修飾它。2:線程控制函數常使用靜態函數靜態函數有特定的地址空間,這樣可以避免在運行時system對內存調整帶來的問題。3:Windows系統API,也常使用靜態函數調用方面,不用在調用前實例化。三、實例代碼
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/shuigsls/archive/2008/07/13/2645918.aspx