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

c/c++內(nèi)存分配大小實(shí)例講解

 更新時(shí)間:2021年11月15日 08:39:17   作者:jihite  
在本篇文章里小編給大家整理了一篇關(guān)于c/c++內(nèi)存分配大小實(shí)例講解內(nèi)容,有需要的朋友們可以跟著學(xué)習(xí)參考下。

測(cè)試平臺(tái):linux 32位系統(tǒng)

用sizeof()運(yùn)算符計(jì)算分配空間大小。單位:字節(jié)

1. 數(shù)組名與變量名的區(qū)別

int main()
{
    char q[] = "hello";
    cout << "q:" << sizeof(q) << endl;
    char *mq = q;
    cout << "mq:" << sizeof(mq) << endl;

    const char *p = "hello";
    cout << "p:" << sizeof(p) << endl;
}

結(jié)果

q:6
mq:4
p:4

分析

q是數(shù)組名,申請(qǐng)內(nèi)存是編譯器記住了,但是賦值給mq后,mq和p一樣是一個(gè)普通的指針了,大小為4.

總之:c/c++沒(méi)有辦法知道指針?biāo)傅膬?nèi)存容量,除非在申請(qǐng)時(shí)記住它。

2. 類的內(nèi)存分配

2.1 空類

#include <iostream>
using namespace std;


class A
{
};

int main()
{
    A a;
    cout << sizeof(a) << endl;
}

結(jié)果

1

分析

所謂類的實(shí)例化就是在內(nèi)存中分配一塊地址(空類同樣可以被實(shí)例化),每個(gè)實(shí)例在內(nèi)存中都有一個(gè)獨(dú)一無(wú)二的地址,為了達(dá)到這個(gè)目的,編譯器往往會(huì)給一個(gè)空類隱含的加一個(gè)字節(jié),這樣空類在實(shí)例化后在內(nèi)存得到了獨(dú)一無(wú)二的地址.因?yàn)槿绻疹惒浑[含加一個(gè)字節(jié)的話,則空類無(wú)所謂實(shí)例化了(因?yàn)轭惖膶?shí)例化就是在內(nèi)存中分配一塊地址。

2.2 類只有成員變量

#include <iostream>
using namespace std;


class A
{
    public:
        int val;
};

int main()
{
    A a;
    cout << sizeof(a) << endl;
}

結(jié)果

4

解釋

這個(gè)4是int類型類的成員變量所占字節(jié)數(shù)

2.2 類含有成員函數(shù)

#include <iostream>
using namespace std;


class A
{
    public:
        A(int value) : val(value) {}
        int val;
};

int main()
{
    A a(3);
    cout << sizeof(a) << endl;
}

結(jié)果

4

分析

這個(gè)4是int類型類的成員變量所占字節(jié)數(shù)。即成員函數(shù)沒(méi)有占空間。原因是這樣的:成員函數(shù)不屬于類(或類的對(duì)象),所有的成員函數(shù)和全局函數(shù)都在代碼段,在調(diào)用成員函數(shù)時(shí),會(huì)隱式的通過(guò)this指針過(guò)去調(diào)用。

3.3 類中含有靜態(tài)成員

#include <iostream>
using namespace std;


class A
{
    public:
        A(int value) : val(value) {}
        int val;
        static int sta_val;
};
int A::sta_val = 3;

int main()
{
    A a(3);
    cout << sizeof(a) << endl;
}

結(jié)果

4

分析

這個(gè)4仍然是int類型類的成員變量所占字節(jié)數(shù)。static變量存放于靜態(tài)區(qū),并不和普通成員變量(存于棧)放在一起。

3.4 類中含有virtural函數(shù)

#include <iostream>
using namespace std;


class A
{
    public:
        int val;
        virtual void fuc() { cout << "hello" << endl; } 
};


int main()
{
    A a;
    cout << sizeof(a) << endl;
}

結(jié)果

8

分析

virtual 會(huì)增加4個(gè)字節(jié)大小的空間。原因:增加一個(gè)virtual ,會(huì)增加一個(gè)虛函數(shù)表指針(即使有多個(gè)虛函數(shù),也僅有一個(gè)虛函數(shù)表),例證

#include <iostream>
using namespace std;


class A
{
    public:
        int val;
        virtual void fuc() { cout << "hello" << endl; } 
        virtual void fuc2() { cout << "hello" << endl; } 
};


int main()
{
    A a;
    cout << sizeof(a) << endl;
}

結(jié)果

8

3.5 子類空間分配

例子1

#include <iostream>
using namespace std;


class A
{
    public:
        int val;
};

class B : public A
{
    int valb;
};


int main()
{
    B b;
    cout << sizeof(b) << endl;
}

結(jié)果

8

例子2

#include <iostream>
using namespace std;


class A
{
    public:
        int val;
        virtual void fuc() {}
};

class B : public A
{
    int valb;
};


int main()
{
    B b;
    cout << sizeof(b) << endl;
}

結(jié)果

Bb

分析

4 + 4 + 4(虛函數(shù)表指針)

到此這篇關(guān)于c/c++內(nèi)存分配大小實(shí)例講解的文章就介紹到這了,更多相關(guān)c/c++內(nèi)存分配大小內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++的數(shù)據(jù)類型你真的了解嗎

    C++的數(shù)據(jù)類型你真的了解嗎

    這篇文章主要為大家詳細(xì)介紹了C++的數(shù)據(jù)類型,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • QT QML的元素布局的實(shí)現(xiàn)

    QT QML的元素布局的實(shí)現(xiàn)

    這篇文章主要介紹了QT QML的元素布局的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • linux之sort命令的用法

    linux之sort命令的用法

    sort將文件的每一行作為一個(gè)單位,相互比較,比較原則是從首字符向后,依次按ASCII碼值進(jìn)行比較,最后將他們按升序輸出
    2013-10-10
  • C++用new創(chuàng)建對(duì)象和不用new創(chuàng)建對(duì)象的區(qū)別解析

    C++用new創(chuàng)建對(duì)象和不用new創(chuàng)建對(duì)象的區(qū)別解析

    在C++用new創(chuàng)建對(duì)象和不用new創(chuàng)建對(duì)象是有區(qū)別的,不知你是否清楚的了解它們到底有什么樣的區(qū)別呢?下面小編就用示例來(lái)告訴大家吧,需要的朋友可以過(guò)來(lái)參考下
    2013-07-07
  • 怎樣用cmd運(yùn)行C程序

    怎樣用cmd運(yùn)行C程序

    這篇文章主要介紹了怎樣用cmd運(yùn)行C程序?今天就來(lái)和大家分享一下用cmd運(yùn)行C程序的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • C++ LibCurl實(shí)現(xiàn)Web指紋識(shí)別功能

    C++ LibCurl實(shí)現(xiàn)Web指紋識(shí)別功能

    Web指紋識(shí)別是一種通過(guò)分析Web應(yīng)用程序的特征和元數(shù)據(jù),以確定應(yīng)用程序所使用的技術(shù)棧和配置的技術(shù),本文將通過(guò)C++中LibCurl庫(kù)實(shí)現(xiàn)簡(jiǎn)單是指紋識(shí)別功能,感興趣的可以了解下
    2023-11-11
  • C/C++中memset,memcpy的使用及fill對(duì)數(shù)組的操作

    C/C++中memset,memcpy的使用及fill對(duì)數(shù)組的操作

    這篇文章主要介紹了C/C++中memset,memcpy的使用及fill對(duì)數(shù)組的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • 淺析多維數(shù)組的下標(biāo)重載

    淺析多維數(shù)組的下標(biāo)重載

    貼一下實(shí)現(xiàn)基本功能的代碼吧,像越界檢測(cè),及其他功能就沒(méi)寫(xiě)了,只要體現(xiàn)了思路,其他的功能好加
    2013-09-09
  • C 讀取ini文件的實(shí)例詳解

    C 讀取ini文件的實(shí)例詳解

    這篇文章主要介紹了C 讀取ini文件的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-10-10
  • 編寫(xiě)C語(yǔ)言程序進(jìn)行進(jìn)制轉(zhuǎn)換的問(wèn)題實(shí)例

    編寫(xiě)C語(yǔ)言程序進(jìn)行進(jìn)制轉(zhuǎn)換的問(wèn)題實(shí)例

    這篇文章主要介紹了編寫(xiě)C語(yǔ)言程序進(jìn)行進(jìn)制轉(zhuǎn)換的問(wèn)題實(shí)例,文中附錄了一個(gè)各種進(jìn)制間的轉(zhuǎn)換程序代碼,需要的朋友可以參考下
    2015-08-08

最新評(píng)論