C 內聯函式與new和delete操作符

2022-05-28 10:33:14 字數 1399 閱讀 2719

c++語言新增關鍵字 inline,用於將乙個函式宣告為內聯函式。在程式編譯時,編譯器會將內聯函式呼叫處用函式體替換,這一點類似於c語言中的巨集擴充套件。

採用內聯函式可以有效避免函式呼叫的開銷,程式執行效率更高。使用內聯函式的缺點就是,如果被宣告為內聯函式的函式體非常大,則編譯器編譯後程式的可執行碼將會變得很大。另外,如果函式體內出現迴圈或者其它複雜的控制結構的時候,這個時候處理這些複雜控制結構所花費的時間遠大於函式呼叫所花的時間,因此如果將這類函式宣告為內聯函式,意義不大,反而會使得編譯後可執行**邊長。

通常在程式設計過程中,我們會將一些頻繁被呼叫的短小函式宣告為內聯函式。

為了使得inline宣告內聯函式有效,我們必須將inline關鍵字與函式體放在一起才行,否則inline關鍵字是不能成功將函式宣告內聯函式的。

在c語言中,動態分配和釋放記憶體的函式是malloc、calloc和free,而在c++語言中,new、new、delete和delete操作符通常會被用來動態地分配記憶體和釋放記憶體。

需要注意的是new、new、delete和delete是操作符,而非函式;new和delete也是c++的關鍵字。

操作符new用於動態分配單個空間,而new則是用於動態分配乙個陣列,操作符delete用於釋放由new分配的空間,delete則用於釋放new分配的乙個陣列。

「new 資料型別」即為new關鍵字的基本語法,可以動態的分配乙個資料型別大小的空間。例如:

int *p = new

int;

為p指標分配了乙個int型的空間。new操作符根據請求分配的資料型別來推斷所需的空間大小。

new 則是為了分配乙個陣列的空間。具體語法如:

int *a = new

int[10];

該語句為a指標分配了乙個陣列的空間,該陣列有10個int陣列成員,如果分配成功,則p指標指向首位址,並且陣列10個成員的位址是連續的,其位址分別為a、a+1、a+2、……、a+9。

delete操作符則專門用於釋放由new分配的動態儲存空間,在前面我們為p分配了乙個int型的空間,我們可以按照如下的方式釋放它:

delete p;

delete 則用於釋放掉由new分配的陣列空間,在前面我們為a指標分配了十個int單元,構成了乙個陣列,可以按照如下方式釋放掉該空間:

delete p;

為了避免記憶體洩露,通常new和delete、new和delete操作符應該成對出現,並且不要將這些操作符與c語言中動態分配記憶體和釋放記憶體的幾個函式一起混用。建議在編寫c++程式時盡量使用new、new、delete和delete操作符進行動態記憶體分配和釋放,而不要使用c語言中記憶體分配和釋放的函式,這是因為new、new、delete和delete操作符可以使用c++的一些特性,如類的建構函式和析構函式,能夠更好地管理c++程式的記憶體。

C 巨集與內聯函式

因為函式呼叫需要開銷 如 保護呼叫者的執行環境 引數傳遞 執行呼叫指令等 所以函式呼叫會帶來程式執行效率的下降,特別是對一些小函式的頻繁呼叫將是程式的效率有很大的降低。c 提出了兩種解決方法 巨集 內聯函式。1.巨集 巨集是c 編譯預處理系統處理的實體。巨集定義的4種格式 1 define 巨集名 ...

C 巨集和內聯函式

c 內聯函式 巨集 就是使用乙個字串來代替乙個表示式大媽或函式呼叫 編譯之前,預處理器會使用這個巨集字串所代表的表示式 或函式呼叫 來替換所有出現的巨集字串,這樣的話,用巨集表示的函式呼叫 就不用另外開闢函式棧,不用保護和恢復函式呼叫現場,這樣就提高了 的執行效率 所以,呼叫乙個巨集比呼叫乙個函式更...

C 中內聯函式與巨集

c 內聯函式 inline 介紹 介紹內聯函式之前,有必要介紹一下預處理巨集。內聯函式的功能和預處理巨集的功能相似。相信大家都用過預處理巨集,我們會經常定義一些巨集,如 define table comp x x 0?x 0 define table comp x x 0?x 0 就定義了乙個巨集。...