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

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

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

注意

基本數(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ù)類型變化而變化

其實質(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 引用

引用又叫別名

其所占空間與引用對象所占空間一致

#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有**邊界對齊(湊4或8)**的要求

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

類型小的放在最前面

關(guān)于邊界對齊舉幾個例子就好說了

類型A1的大小為4

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

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

但多了一個char類型變量

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

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

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

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

類型A4大小為8

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

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

A5大小為 12

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

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

考慮類型A6

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

這時候A6 的大小為3

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

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

大小為 8

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

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

A8大小為 16

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

總結(jié)

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

3.2 union

這個不用說,直接取里面成員需要的最大空間

共用體u所用空間 4

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

3.3 enum

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

占用4B

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

3.4 class

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

輸出結(jié)果為1

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

給它加上一個自定義的成員函數(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)過幾次實驗,類大小似乎與類的成員函數(shù)無關(guān)

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

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

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

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

例如

class p{
	public:
		char c1;
};

該類成員對象的大小為1

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

答案是 是!

實驗一下

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

這個類(所產(chǎn)生對象)的大小為 24

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

總結(jié)

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

相關(guān)文章

  • C++使用異或運算實現(xiàn)交換兩個數(shù)的值

    C++使用異或運算實現(xiàn)交換兩個數(shù)的值

    交換兩個數(shù)的值,通常用利用一個變量來交換數(shù)值,異或交換兩個數(shù)的值是資源開銷最小的方法,不需要中介數(shù),原理簡單的來說就是異或的負負得正
    2018-09-09
  • C語言動態(tài)內(nèi)存管理malloc柔性數(shù)組示例詳解

    C語言動態(tài)內(nèi)存管理malloc柔性數(shù)組示例詳解

    這篇文章主要為大家介紹了C語言動態(tài)內(nèi)存管理malloc柔性數(shù)組示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • C語言實現(xiàn)簡單井字棋游戲

    C語言實現(xiàn)簡單井字棋游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡單井字棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • C++報錯`Null Pointer Dereference`的解決方法

    C++報錯`Null Pointer Dereference`的解決方法

    在軟件開發(fā)中,Null Pointer Dereference 是一種常見的錯誤,它發(fā)生在程序試圖訪問或操作一個空指針指向的內(nèi)存位置時,這種情況通常會導(dǎo)致程序崩潰,給 debug 工作帶來很大困擾,今天,我們將探討如何解決 Null Pointer Dereference 報錯,需要的朋友可以參考下
    2024-07-07
  • 淺談C++11中的幾種鎖

    淺談C++11中的幾種鎖

    本文主要介紹了C++11中的幾種鎖,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • OpenCV mask的作用及如何制作掩模mask

    OpenCV mask的作用及如何制作掩模mask

    mask 不是馬斯克,是掩膜,可以用來遮蓋非感興趣區(qū),突出感興趣區(qū),使得圖像處理只專注于ROI部分,OpenCV中的很多函數(shù)用到mask,mask是什么?怎么制作一個mask?本文給大家分享OpenCV mask的作用及如何制作掩模mask,感興趣的朋友一起看看吧
    2023-02-02
  • Qt實現(xiàn)簡單UDP通信

    Qt實現(xiàn)簡單UDP通信

    這篇文章主要為大家詳細介紹了Qt實現(xiàn)簡單UDP通信,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Qt實現(xiàn)實時鼠標(biāo)繪制圖形

    Qt實現(xiàn)實時鼠標(biāo)繪制圖形

    這篇文章主要介紹了Qt中QGraphicsView架構(gòu)下如何實現(xiàn)實時鼠標(biāo)繪制圖形,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起動手試一試
    2022-02-02
  • 零基礎(chǔ)學(xué)習(xí)C/C++需要注意的地方

    零基礎(chǔ)學(xué)習(xí)C/C++需要注意的地方

    這篇文章主要介紹了零基礎(chǔ)學(xué)習(xí)C/C++需要注意的地方,文中講解非常細致,供大家參考和學(xué)習(xí),想要學(xué)習(xí)C/C++的可以閱讀此文
    2020-06-06
  • C++面試八股文之位運算問題詳解

    C++面試八股文之位運算問題詳解

    這篇文章主要為大家介紹了C++面試八股文之位運算的問題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06

最新評論

保定市| 格尔木市| 曲阜市| 高邮市| 昂仁县| 东乌珠穆沁旗| 望奎县| 三穗县| 墨江| 康马县| 泸溪县| 鄂托克旗| 无为县| 山东省| 额敏县| 东明县| 察雅县| 武威市| 中宁县| 全椒县| 汤原县| 全椒县| 宁化县| 阿拉尔市| 台南县| 桃园县| 昌都县| 志丹县| 永新县| 民丰县| 桦川县| 康保县| 志丹县| 大埔区| 寻甸| 盐津县| 张家口市| 竹溪县| 伊川县| 宁陕县| 杂多县|