概述
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.总结
对于不同的数据结构,内部的存储都具有一定的规律,本章主要讲解一些简单常用的数据类型的内存。对于结构体的存储,关系到宽字符的对齐,需要经过一定的判断。另外,对于类的存储和实例化,可能机制会更加复杂,我们将会在后面的章节讲到。
转载于:https://my.oschina.net/u/3520549/blog/1528311
最后
以上就是热心铃铛为你收集整理的C++中不同类型变量的内存0.前言1.变量的类型2.变量的内存 3.总结的全部内容,希望文章能够帮你解决C++中不同类型变量的内存0.前言1.变量的类型2.变量的内存 3.总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复