最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

成員函數和this指針

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

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

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

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

成員函數并不占用對象的內存空間

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

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

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

不分函數類型

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

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

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

Lambda函數

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

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

例如:

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

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

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

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

您可能感興趣的文章:

相關文章

  • C語言深入探索遞歸的特點

    C語言深入探索遞歸的特點

    程序調???的編程技巧稱為遞歸 recursion)函數??調???就是遞歸,你也可以理解成是?種嵌套結構,但遞歸分為倆部分,第?是“遞”,進?嵌套結構。第?是”歸“,最終會?步?步返回。第?次接觸遞歸都會很懵,慢慢理解這個過程就明?了
    2022-06-06
  • Qt實現(xiàn)屏幕底部冒泡效果

    Qt實現(xiàn)屏幕底部冒泡效果

    這篇文章主要為大家詳細介紹了Qt實現(xiàn)屏幕底部冒泡效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • C語言結構體詳細圖解分析

    C語言結構體詳細圖解分析

    C 數組允許定義可存儲相同類型數據項的變量,結構是 C 編程中另一種用戶自定義的可用的數據類型,它允許你存儲不同類型的數據項,本篇讓我們來了解C 的結構體
    2022-03-03
  • 使用OpenGL實現(xiàn)3D立體顯示的程序代碼

    使用OpenGL實現(xiàn)3D立體顯示的程序代碼

    本篇文章是對使用OpenGL實現(xiàn)3D立體顯示的方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • 讓應用程序只運行一個實例的實現(xiàn)方法

    讓應用程序只運行一個實例的實現(xiàn)方法

    我們在使用《360軟件管家》時發(fā)現(xiàn),在《360軟件管家》已經運行了的情況下,再次點擊《360軟件管家》的圖標,那么它不會再運行另外一個《360軟件管家》,而是將已有的《360軟件管家》給激活,始終只能運行一個《360軟件管家》的實例
    2013-05-05
  • C++中fstream,ifstream及ofstream用法淺析

    C++中fstream,ifstream及ofstream用法淺析

    這篇文章主要介紹了C++中fstream,ifstream及ofstream用法,適合C++初學者學習文件流的操作,需要的朋友可以參考下
    2014-08-08
  • C++之默認參數詳解

    C++之默認參數詳解

    這篇文章主要介紹了C++的默認參數,是C++入門學習中的基礎知識,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-11-11
  • C++實現(xiàn)LeetCode(36.驗證數獨)

    C++實現(xiàn)LeetCode(36.驗證數獨)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(36.驗證數獨),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-07-07
  • 一文詳解C語言中的switch語句和while循環(huán)

    一文詳解C語言中的switch語句和while循環(huán)

    這篇文章主要給大家詳細介紹了C語言中的switch語句和while循環(huán),文中通過代碼示例給大家介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2023-12-12
  • c/c++單例模式類的混合編譯案例詳解

    c/c++單例模式類的混合編譯案例詳解

    ? 由于c語言中沒有類的概念,因此對于有類的cpp文件與c文件混合編譯時,提供一個中間層提供類的操作接口,在c文件中調用接口實現(xiàn)間接操作類對象,這篇文章主要介紹了c/c++單例模式類的混合編譯的相關資料
    2022-10-10

最新評論

临清市| 盐亭县| 英德市| 来宾市| 南投市| 龙游县| 饶阳县| 彩票| 扎兰屯市| 金寨县| 唐山市| 凯里市| 平阳县| 兴安县| 桓台县| 泾川县| 宜宾市| 宁河县| 高青县| 曲松县| 石嘴山市| 南召县| 马山县| 邹平县| 乳山市| 汝州市| 宝山区| 赤壁市| 湟中县| 四平市| 武安市| 息烽县| 河池市| 淮阳县| 光泽县| 汉川市| 岳阳县| 盐城市| 普洱| 黎城县| 彭阳县|