欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C/C++?函數(shù)的存儲位置和占用空間詳解

 更新時間:2023年06月08日 11:37:16   作者:泡沫o0  
Lambda函數(shù)的代碼部分在代碼段中,被捕獲的變量存儲在Lambda函數(shù)對象的內部,這些變量的存儲位置取決于Lambda函數(shù)對象的存儲位置,這篇文章主要介紹了C/C++函數(shù)的存儲位置和占用空間,需要的朋友可以參考下

成員函數(shù)和this指針

C++類的成員函數(shù)并不以函數(shù)指針的形式存儲在類的結構中。類的成員函數(shù)在編譯時就已經(jīng)確定了地址,它們不占用類實例的存儲空間。這意味著,無論你創(chuàng)建多少個類的對象,成員函數(shù)只有一份拷貝。

當你調用一個對象的成員函數(shù)時,編譯器知道去哪里找到這個函數(shù)的代碼,并且知道如何傳遞特殊的隱藏參數(shù)this,這個參數(shù)是一個指向調用對象的指針,用于訪問對象的數(shù)據(jù)成員。

然而,你可以在類中定義成員函數(shù)指針,并且這個指針會占用類實例的存儲空間。這個指針的大小通常是4字節(jié)(在32位系統(tǒng)上)或8字節(jié)(在64位系統(tǒng)上),但這取決于具體的實現(xiàn)。

總的來說,成員函數(shù)本身并不存儲在類的實例中,但是成員函數(shù)指針可以作為類的成員變量,占用類實例的存儲空間。

成員函數(shù)并不占用對象的內存空間

成員函數(shù)并不占用對象的內存空間。無論你在類中聲明多少個成員函數(shù),每個對象的大小都不會因此改變。這是因為成員函數(shù)在編譯時就已經(jīng)確定了地址,它們存儲在代碼段,而不是每個對象的內存空間中。

this指針是一個隱含的參數(shù),當你調用一個對象的成員函數(shù)時,編譯器會自動將對象的地址作為this指針傳遞給成員函數(shù)。this指針用于訪問調用對象的數(shù)據(jù)成員和其他成員函數(shù)。

但是需要注意的是,this指針并不存儲成員函數(shù)的地址。它只是一個指向當前對象的指針,用于在成員函數(shù)內部訪問對象的數(shù)據(jù)成員和其他成員函數(shù)。成員函數(shù)的地址是在編譯時確定的,存儲在代碼段中。

不分函數(shù)類型

無論是全局函數(shù)、靜態(tài)成員函數(shù),還是const成員函數(shù),它們的行為在這方面都是類似的。這些函數(shù)的代碼在編譯時就已經(jīng)確定了位置,存儲在代碼段中,而不是存儲在每個對象的內存空間中。下面是一些額外的細節(jié):

  • 全局函數(shù):全局函數(shù)不屬于任何類,它們的地址在編譯時就確定了,存儲在代碼段中。
  • 靜態(tài)成員函數(shù):靜態(tài)成員函數(shù)屬于類,而不是類的對象。你可以在沒有類的對象的情況下調用靜態(tài)成員函數(shù)。靜態(tài)成員函數(shù)的地址在編譯時就確定了,存儲在代碼段中。靜態(tài)成員函數(shù)沒有this指針,因為它們不與特定的對象關聯(lián)。
  • const成員函數(shù):const成員函數(shù)是一種特殊類型的成員函數(shù),它們不能修改對象的數(shù)據(jù)成員(除非這些成員被聲明為mutable)。const成員函數(shù)的地址在編譯時就確定了,存儲在代碼段中。在const成員函數(shù)中,this指針是一個指向const的指針,這意味著你不能通過this指針來修改對象的數(shù)據(jù)成員。

總的來說,函數(shù)(無論是全局函數(shù)、靜態(tài)成員函數(shù),還是const成員函數(shù))的代碼都存儲在代碼段中,而不是對象的內存空間中。

Lambda函數(shù)

Lambda函數(shù)在C++中是一個特殊的對象類型,被稱為閉包類型。每個Lambda表達式都會生成一個唯一的閉包類型。Lambda函數(shù)的代碼部分(即{}中的部分)在編譯時確定,存儲在代碼段中,這與其他函數(shù)相同。

然而,Lambda函數(shù)可能會捕獲其周圍的變量,這些被捕獲的變量被存儲在Lambda函數(shù)對象的內部。這些變量的存儲位置取決于Lambda函數(shù)對象的存儲位置。如果Lambda函數(shù)對象在棧上創(chuàng)建,那么這些捕獲的變量也在棧上。如果Lambda函數(shù)對象在堆上創(chuàng)建(例如,通過使用new關鍵字),那么這些捕獲的變量也在堆上。

例如:

int x = 10;
auto lambda = [x]() { return x + 1; };

在這個例子中,lambda是一個Lambda函數(shù)對象,它捕獲了變量xx的值被存儲在lambda對象內部,而lambda對象本身在棧上創(chuàng)建。

總的來說,Lambda函數(shù)的代碼部分在代碼段中,被捕獲的變量存儲在Lambda函數(shù)對象的內部,這些變量的存儲位置取決于Lambda函數(shù)對象的存儲位置。

到此這篇關于C/C++ 函數(shù)的存儲位置和占用空間的文章就介紹到這了,更多相關C++ 函數(shù)的存儲位置內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關文章

最新評論