C++中不同类型变量的内存
博客专区 > zhaoWSW 的博客 > 博客详情
C++中不同类型变量的内存
zhaoWSW 发表于3个月前
C++中不同类型变量的内存
  • 发表于 3个月前
  • 阅读 1
  • 收藏 0
  • 点赞 0
  • 评论 0
摘要: sizeof(type)

0.前言

    许多编程初学者,第一个接触的比较重要的就是变量,变量分为很多种的类型,更加确切的说是数据的类型。简单的数据类型的划分为下图,大家可以进行简单的了解。我们本章主要讨论的是不同的数据的类型占用的内存大小,这也是学习计算机的需要具备的最基础的常识。

    

1.变量的类型

    在编程学习中,我们的常见的数据类型有:

    char , short  ,int  ,unsigned int , long  ,long long  ,float  ,double

    还有指针类型 chat * , int * , float * , double *

2.变量的内存

    2.1 常用的数据类型

    变量类型的内存大小其实是与操作系统有关系的,或者说与编译器的运行环境有关系,在32位操作系统中:

    

常用数据类型内存

数据类型 占用内存
char 1B
bool 1B
short 2B
int 4B
unsigned int 4B
long 4B
long long 8B
float 4B
double 8B
char * 4B
int * 4B
float * 4B

    我们使用win32环境进行测试,代码如下:

    

#include "iostream"
using namespace std;

int main(){

	char ch;
	short sh;
	int in;
	long lo;
	long long llo;
	unsigned int unin;
	float fl;
	double dou;
	char * chx;
	int * inx;
	float * flx;
	cout << "char         占用内存大小:" << sizeof(ch) << "B" << endl;
	cout << "short        占用内存大小:" << sizeof(sh) << "B" << endl;
	cout << "int          占用内存大小:" << sizeof(in) << "B" << endl;
	cout << "long         占用内存大小:" << sizeof(lo) << "B" << endl;
	cout << "long long    占用内存大小:" << sizeof(llo) << "B" << endl;
	cout << "usigened int 占用内存大小:" << sizeof(unin) << "B" << endl;
	cout << "float        占用内存大小:" << sizeof(fl) << "B" << endl;
	cout << "double       占用内存大小:" << sizeof(dou) << "B" << endl;
	cout << "char *       占用内存大小:" << sizeof(chx) << "B" << endl;
	cout << "int *        占用内存大小:" << sizeof(inx) << "B" << endl;
	cout << "float *      占用内存大小:" << sizeof(flx) << "B" << endl;
}

    测试结果如下:

char         占用内存大小:1B
short        占用内存大小:2B
int          占用内存大小:4B
long         占用内存大小:4B
long long    占用内存大小:8B
usigened int 占用内存大小:4B
float        占用内存大小:4B
double       占用内存大小:8B
char *       占用内存大小:4B
int *        占用内存大小:4B
float *      占用内存大小:4B

    2.2 结构体

    对于结构体来说,结构体的每一个的数据的存储都是按照单元来进行存储的,单元的大小取决于结构体中最大的内存的数据类型占用的字节数。

    细化一点,对于结构体,内部每一个类型都会以结构体中最大的内存的数据类型占用的字节数为单元进行开辟,但是在开辟之前,要以本身为最小粒度从已经开辟的上一个存储单元的内存的首地址进行移位比对,如果有空闲的内存则存储(足够),否则开辟最大单元内存进行存储。

    测试代码如下:

    

#include "iostream"
using namespace std;

struct typeA{
	char a;
	char b;
	char c;
};
struct typeB{
	char a;
	int b;
	char c;
};
struct typeC{
	char a; 
	short b;
	int c;
};
struct typeD{
	char a;
	int b;
	long long c;

};
struct typeE{
	char a;
	long long c;
	int b;
	
};

int main(){

	typeA a;
	typeB b;
	typeC c;
	typeD d;
	typeE e;
	cout << "typeA   占用的内存大小:"<<sizeof(a) <<"B"<< endl;
	cout << "typeB   占用的内存大小:" << sizeof(b) << "B" << endl;
	cout << "typeC   占用的内存大小:" << sizeof(c) << "B" << endl;
	cout << "typeD   占用的内存大小:" << sizeof(d) << "B" << endl;
	cout << "typeE   占用的内存大小:" << sizeof(e) << "B" << endl;
}

    测试结果如下:

typeA   占用的内存大小:3B
typeB   占用的内存大小:12B
typeC   占用的内存大小:8B
typeD   占用的内存大小:16B
typeE   占用的内存大小:24B

    分析如下:

    

typeA

A
A
A

typeB

A null null null
B B B B
C null null null

typeC

A B B null
C C C C

typeD

A B B B B null null null
C C C C C C C C

typeE

A null null null null null null null
C C C C C C C C
B B B B null null null null

3.总结

    对于不同的数据结构,内部的存储都具有一定的规律,本章主要讲解一些简单常用的数据类型的内存。对于结构体的存储,关系到宽字符的对齐,需要经过一定的判断。另外,对于类的存储和实例化,可能机制会更加复杂,我们将会在后面的章节讲到。

共有 人打赏支持
粉丝 0
博文 2
码字总数 2128
×
zhaoWSW
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: