C++各种数据类型所占内存大小
文章目录
- 0. 注意
- 1.基本数据类型
- 2. 指针与引用
- 2.1指针
- 2.2 引用
- 3.构造类型
- 3.1 struct
- 3.2 union
- 3.3 enum
- 3.4 class
0. 注意
基本数据类型占用数据大小还与系统位数有关,我们假设为64位的系统
1.基本数据类型
char : 1
short: 2
int: 4
long long: 8
float:4
double:8
bool:1
2. 指针与引用
2.1指针
指针所占的内存空间不随数据类型变化而变化
其实质是地址空间
所以均为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.构造类型
3.1 struct
由于struct有**边界对齐(凑4或8)**的要求
所以尽量将同类型的写一块
类型小的放在最前面
关于边界对齐举几个例子就好说了
类型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类型 基础上添加一个int 变量成员
类型A4大小为8
struct p{char c1short s1;int i1;
}A4;
在A3基础上加一个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
说明了边界对齐只发生在有不同数据类型时
在A6 基础上加一个int类型数据得到** A7**
大小为 8
typedef struct _p{char c1; char c2;char c3;int i1;
}p;
如果A6上加上个long long 类型数据呢
A8大小为 16
typedef struct _p{char c1; char c2;char c3;long long ll1;
}p;
总结
当变量中不存在8字节的变量时(不足4补充成4的倍数)
总是向4字节对齐(多个变量)
出现的话就8字节对齐
3.2 union
这个不用说,直接取里面成员需要的最大空间
共用体u所用空间 4
union p{char c1;short s1;char c2;int i1;
}u;
3.3 enum
枚举变量可以当作一个int
占用4B
enum _color{red = 1,yellow = 2,blue = 3
}Color;
3.4 class
一个空类占多少字节呢?
输出结果为1
class p{};int main(){printf("%d\n", sizeof(p));
}
给它加上一个自定义的成员函数呢
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");}
};
经过几次实验,类大小似乎与类的成员函数无关
可以猜测一下,一个类的对象只是将成员函数放在
类的相关位置,每个对象调用只是取这个类的位置然后调用成员函数
成员函数并不占用对象空间,所以
类的大小只取决于定义的数据类型的大小
例如
class p{public:char c1;
};
该类成员对象的大小为1
类会有边界对齐的规则吗?
答案是 是!
实验一下
class p{public:char c1; long long ll1;int t2;
};
这个类(所产生对象)的大小为 24 !
所以类(对象)的大小相当于把它看成结构体的大小
C++各种数据类型所占内存大小相关推荐
- Go语言基础数据类型所占内存大小
基础知识 bit(位):计算机中数据的最小单位,二进制数中的一个数位,0或者1 Byte(字节):计算机中数据的基本单位,每8位(bit)组成一个字节 golang 类型 大小 int8 1字节 in ...
- C语言数据类型所占空间大小
C语言数据类型所占空间大小 /* * datasize.c -- print the size of common data items * This runs with any Linux kern ...
- C++_类和结构体所占内存大小,静态成员问题
C++_类和结构体所占内存大小,静态成员问题 静态成员未初始化或者未调用(当然静态成员必须类外初始化才能调用)是不占内存的.静态成员不占类或结构体的内存 静态成员函数同样只声明未定义同样不占内存 指针 ...
- Java计算一个对象所占内存大小_Java程序计算各种对象所占内存的大小的方法
System.out.println("--- Memory Usage:"); /*打印一行字符串---Memory Usage*/ Runtime rt=Runtime.get ...
- 共用体和结构体所占内存大小的计算方法
共同体作用:让几个不同类型的变量共享同一个内存地址. 共用体所占内存大小:共用体所占内存的大小即公用体中长度最大元素所占用的字节数. #include<stdio.h> typedef u ...
- 利用bitmap处理海量数据问题:43亿QQ号所占内存大小为什么是512M?40亿个QQ号如何去重?
参考: 腾讯43亿QQ号码用完后怎么办? 腾讯三面:40亿个QQ号码如何去重 一.背景: 首先,明确两点: QQ号是 unsigned int 类型(4字节无符号整数,共32bit), 也就是说 Q ...
- 初识C语言(一)常见变量的含义、所能存储数据的范围、及其所占内存大小。
一 .变量的类型及其所占内存大小 刚开始学习C语言的时候就会接触到变量的这个概念,变量有很多种类,整型,浮点型等.那么就要了解一下每种类型的变量的含义.能够存储的数据的范围.以及它所占内存的大小. 提 ...
- 如何计算变量或数据类型所占内存空间的大小
内存的储存单元是一个线性地址表,是按字节进行编址的 一个字节可以表示的整数最小为0,最大为255,一个字节等于八个比特,也称二进制位 1B=8b 1KB=1024B 1MB=1024KB 之后更大的依 ...
- C语言数据类型占内存大小
C语言数据类型 使用sizeof计算各数据类型占用内存大小 #include<stdio.h> int main() {typedef struct {int a ;char b;int ...
最新文章
- 全局唯一ID生成方案
- Linux的load导入语句,LOAD DATA INFILE语句导入数据进入MySQL的一些注意事项
- 【JETSON-NANO】SD卡系统备份克隆
- 即时通讯音视频开发(三):视频编解码之编码基础
- Qt程序单次启动(QSingleApplication类)
- (四)boost库之正则表达式regex
- mysql too many openfiles解决
- 三层架构 android访问MSSQL数据库 程序 (服务器端)
- 读书笔记—《销售铁军》随记3
- 机器学习(6): 层次聚类 hierarchical clustering
- 吴恩达深度学习4.2练习_Convolutional Neural Networks_the Happy House(Keras)
- 瘦子的肠道菌群和胖子的区别_胖子和瘦子的终极 PK:比基因?比运动?比肠道细菌!...
- 什么是X11-Forwarding
- win10系统更新服务器太慢了,Win10系统更新安装慢如何解决
- android仿网易云音乐引导页、仿书旗小说Flutter版、ViewPager切换、爆炸菜单、风扇叶片效果等源码...
- SpringBoot之加密
- 自动作诗器 二逼青年立马变文艺青年~~
- 【C4D】所遇问题及解决方法
- poj 1264 hdu 1616 SCUD Busters 凸包+面积计算
- c语言从键盘输入一个百分制成绩score,C语言程序设计实验实验指导书及答案
热门文章
- 模块“DAO350.DLL”可能与你正在运行的windows版本不兼容
- 链表之反转链表,万金油的解题方法(java求解)
- 解决:Required request body is missing
- 独立手机版营销推广落地页pbootcms模板落地页单页网站
- 正大国际期货:你身边有朋友或者亲人做期货挣钱的没有?
- 图解ReentrantLock底层公平锁和非公平锁实现原理
- Java遍历HashSet为什么输出是有序的?
- java word加粗_word中选中一行加粗 怎么全文都被加粗了 怎么解决
- ABAPDEMOCALLTRANSACTION使用_SAP刘梦_新浪博客
- 7.4 小团队、低成本的管理实践之路