2015-09-25 16 views
-1

在C++中使用內聯代碼的更有效方法是什麼?C++中的內嵌模式

我應該使用它爲運營商收取額外費用嗎?

inline const Composant & Composant::operator=(const Composant &c) 
{ 
    if (this != &c) 
{ 
    free(_description); 
    _description = strdup(c.getDescription()); 
} 

爲了獲得最佳性能...我不想太多地使用它。

謝謝

+1

與你的問題無關,但對於字符串,你爲什麼不使用'std :: string'? –

+0

因爲我還不能使用它(與學校有關的項目)。 – Mxsky

+0

新增並刪除C++,malloc和c – Gilad

回答

1

我忽略了「風格」爲理由,內聯/非內聯代碼。這當然是一個非常重要的部分。

operator=的例子是一個很好的例子,我會內聯。它僅增加了代碼一點點:

一個this和地址的c之間比較,一個分支,以free通話和strdup(和存儲返回值)的呼叫。

但是,如果您的operator=變爲10-15行,則撥打更多的電話給freedelete等,那麼可能使非內聯是個好主意。與許多事情一樣,這是一個判斷(或者給它一個奇特的名字「工程決策」,但大多數時候這些只是「我知道這會工作正常」),並且真正知道哪個更好的是,你需要測量和分析你的代碼,以瞭解它花在哪裏的時間,以及「我怎麼做得少」。

最重要的功能是在循環內部使用的功能,特別是那些迭代次數較多的功能。大多數程序都有一到六個這樣的「大部分時間都花在哪裏」的循環。優化其他代碼是毫無意義的,因爲它可能會在執行主循環一百萬次的程序執行過程中執行十次。讓「十幾次」代碼在每個通話中運行12個時鐘週期並不重要。讓你百萬次的內在部分在每個循環中循環更快12個時鐘週期可能會有所作爲,因爲現在它快了1200萬個週期。如果你在中央循環中有30個函數調用,並且你平均每個循環快12個週期,那麼現在我們正在談論數以億計的週期,所以現在我們處在一個現代處理器的十分之幾秒鐘內。