亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++各種數(shù)據(jù)類型所占內(nèi)存大小詳解

 更新時(shí)間:2023年08月04日 16:21:08   作者:_不會(huì)dp不改名_  
這篇文章主要介紹了C++各種數(shù)據(jù)類型所占內(nèi)存大小,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

注意

基本數(shù)據(jù)類型占用數(shù)據(jù)大小還與系統(tǒng)位數(shù)有關(guān),我們假設(shè)為64位的系統(tǒng)

1.基本數(shù)據(jù)類型

  • char : 1
  • short: 2
  • int: 4
  • long long: 8
  • float:4
  • double:8
  • bool:1

2. 指針與引用

2.1指針

指針?biāo)嫉膬?nèi)存空間不隨數(shù)據(jù)類型變化而變化

其實(shí)質(zhì)是地址空間

所以均為8

#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
#include <string>
using namespace std;
typedef struct _node{
	char c1;
	char c2;
	char c3;
long long i1;
}node;
int main(){
	int i = 1;
	short t = 12;
	char c ='c';
	long long ll = 521;
	node q;
	node *pn = &q;
	int *pi = &i;
	short *pt = &t;
	char *pc = &c;
	printf("%d\n",sizeof(pn));
	printf("%d\n",sizeof(pi));
	printf("%d\n",sizeof(pt));
	printf("%d\n",sizeof(pc));
} 
// 8 8 8 8

2.2 引用

引用又叫別名

其所占空間與引用對(duì)象所占空間一致

#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
#include <string>
using namespace std;
typedef struct _node{
	char c1;
	char c2;
	char c3;
long long i1;
}node;
int main(){
	int i = 1;
	short t = 12;
	char c ='c';
	long long ll = 521;
	node q;
	node &rn = q;
	int &ri = i;
	short &rt = t;
	char &rc = c;
	printf("%d\n",sizeof(rn));
	printf("%d\n",sizeof(ri));
	printf("%d\n",sizeof(rt));
	printf("%d\n",sizeof(rc));
} 
// 16 4 1 2

3.構(gòu)造類型

3.1 struct

由于struct有**邊界對(duì)齊(湊4或8)**的要求

所以盡量將同類型的寫一塊

類型小的放在最前面

關(guān)于邊界對(duì)齊舉幾個(gè)例子就好說(shuō)了

類型A1的大小為4

struct p{
	char c1;
	short s1;
}A1;

神奇的是類型A2的大小也為4

但多了一個(gè)char類型變量

struct p{
	char c1;
	char c2;
	short s1;
}A2;

如果交換 類型A3的大小為6

struct p{
	char c1;
	short s1;
	char c2;
}A3;

在A1類型 基礎(chǔ)上添加一個(gè)int 變量成員

類型A4大小為8

struct p{
	char c1
	short s1;
	int  i1; 
}A4;

在A3基礎(chǔ)上加一個(gè)int 變量成員

A5大小為 12

struct p{
	char c1;
	short s1;
	char c2;
	int i1;
}A5;

這樣似乎還不知道怎么算邊界對(duì)齊的類型大小

考慮類型A6

typedef struct _p{
	char c1;	
	char c2;
	char c3;	
}p;

這時(shí)候A6 的大小為3

說(shuō)明了邊界對(duì)齊只發(fā)生在有不同數(shù)據(jù)類型時(shí)

在A6 基礎(chǔ)上加一個(gè)int類型數(shù)據(jù)得到** A7**

大小為 8

typedef struct _p{
	char c1;	
	char c2;
	char c3;
	int i1;	
}p;

如果A6上加上個(gè)long long 類型數(shù)據(jù)呢

A8大小為 16

typedef struct _p{
	char c1;	
	char c2;
	char c3;
	long long ll1;	
}p;

總結(jié)

  • 當(dāng)變量中不存在8字節(jié)的變量時(shí)(不足4補(bǔ)充成4的倍數(shù))
  • 總是向4字節(jié)對(duì)齊(多個(gè)變量)
  • 出現(xiàn)的話就8字節(jié)對(duì)齊

3.2 union

這個(gè)不用說(shuō),直接取里面成員需要的最大空間

共用體u所用空間 4

union p{
	char c1;
	short s1;
	char c2;
	int i1;
}u;

3.3 enum

枚舉變量可以當(dāng)作一個(gè)int

占用4B

enum _color{
	red = 1,
	yellow = 2,
	blue = 3
}Color;

3.4 class

一個(gè)空類占多少字節(jié)呢?

輸出結(jié)果為1

class p{
};
int main(){
	printf("%d\n", sizeof(p));
} 

給它加上一個(gè)自定義的成員函數(shù)

class p{
	public:
		void pint(void){
			printf("member function\n");
		}
};

答案還是1,那是不是加的不夠多?

class p{
	public:
		void pint(void){
			printf("member function\n");
		}
		void pint1(void){
			printf("member function1\n");
		}
		void pint2(void){
			printf("member function2\n");
		}
		void pint3(void){
			printf("member function3\n");
		}
};

經(jīng)過(guò)幾次實(shí)驗(yàn),類大小似乎與類的成員函數(shù)無(wú)關(guān)

可以猜測(cè)一下,一個(gè)類的對(duì)象只是將成員函數(shù)放在

類的相關(guān)位置,每個(gè)對(duì)象調(diào)用只是取這個(gè)類的位置然后調(diào)用成員函數(shù)

成員函數(shù)并不占用對(duì)象空間,所以

類的大小只取決于定義的數(shù)據(jù)類型的大小

例如

class p{
	public:
		char c1;
};

該類成員對(duì)象的大小為1

類會(huì)有邊界對(duì)齊的規(guī)則嗎?

答案是 是!

實(shí)驗(yàn)一下

class p{
	public:
		char c1;	
		long long ll1;
		int t2;
};

這個(gè)類(所產(chǎn)生對(duì)象)的大小為 24 !

所以類(對(duì)象)的大小相當(dāng)于把它看成結(jié)構(gòu)體的大小

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++中vector迭代器失效與深淺拷貝問(wèn)題詳析

    C++中vector迭代器失效與深淺拷貝問(wèn)題詳析

    迭代器失效就是迭代器底層對(duì)應(yīng)指針?biāo)赶虻目臻g倍銷毀了,導(dǎo)致使用了一塊已經(jīng)被釋放了的空間,下面這篇文章主要給大家介紹了C++中vector迭代器失效與深淺拷貝問(wèn)題的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • 基于QT繪制一個(gè)漂亮的預(yù)警儀表

    基于QT繪制一個(gè)漂亮的預(yù)警儀表

    這篇文章主要為大家詳細(xì)介紹了如何基于QT繪制一個(gè)漂亮的預(yù)警儀表,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的可以了解一下
    2023-04-04
  • C++面向?qū)ο缶幊讨鰳?gòu)詳解

    C++面向?qū)ο缶幊讨鰳?gòu)詳解

    這篇文章主要為大家詳細(xì)介紹了C++面向?qū)ο缶幊讨鰳?gòu),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • C++實(shí)現(xiàn)KDTree 附完整代碼

    C++實(shí)現(xiàn)KDTree 附完整代碼

    這篇文章主要介紹了C++實(shí)現(xiàn)KDTree的代碼詳解,包括kdTree概念介紹及分割的作用,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-07-07
  • 深入解讀C語(yǔ)言中的符號(hào)常量EOF

    深入解讀C語(yǔ)言中的符號(hào)常量EOF

    這篇文章主要介紹了C語(yǔ)言中的符號(hào)常量EOF,文中還介紹了EOF的驗(yàn)證和打印方法,需要的朋友可以參考下
    2015-11-11
  • C++詳解Primer文本查詢程序的實(shí)現(xiàn)

    C++詳解Primer文本查詢程序的實(shí)現(xiàn)

    這個(gè)程序還是比較復(fù)雜的,把這句話作為文章的開頭可以看出它的真實(shí)性.....這篇文章主要介紹了文本查詢程序的實(shí)現(xiàn),下面我們一起來(lái)看看
    2022-06-06
  • 在C語(yǔ)言里單引號(hào)和雙引號(hào)的區(qū)別

    在C語(yǔ)言里單引號(hào)和雙引號(hào)的區(qū)別

    這篇文章主要介紹了在C語(yǔ)言里單引號(hào)和雙引號(hào)的區(qū)別,本文通過(guò)代碼的實(shí)例和注釋的詳細(xì)的說(shuō)明了單引號(hào)和雙引號(hào)的概念與區(qū)別,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 使用C語(yǔ)言實(shí)現(xiàn)內(nèi)存池的示例代碼

    使用C語(yǔ)言實(shí)現(xiàn)內(nèi)存池的示例代碼

    所謂內(nèi)存池,顧名思義和線程池的設(shè)計(jì)原理是一樣的,為了減少頻繁申請(qǐng)釋放內(nèi)存而帶來(lái)的資源消耗,減少釋放內(nèi)存后產(chǎn)生的內(nèi)存碎片,下面我們就來(lái)看看如何使用C語(yǔ)言實(shí)現(xiàn)內(nèi)存池吧
    2024-02-02
  • Qt實(shí)現(xiàn)解壓帶有密碼的加密文件

    Qt實(shí)現(xiàn)解壓帶有密碼的加密文件

    Quazip是Qt平臺(tái)下面的一個(gè)壓縮解壓縮庫(kù)。本文將利用Quazip實(shí)現(xiàn)解壓帶有密碼的加密文件,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-02-02
  • C++迭代器失效問(wèn)題及解決

    C++迭代器失效問(wèn)題及解決

    這篇文章主要介紹了C++迭代器失效問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02

最新評(píng)論