一、环境
win10+vs2015免费版
二、结论
以结构体中占用字节最大的类型为基础单元;然后从前往后开始挨个进行组合,不足一个基础单元则加上下一个,如果加上下一个类型超过基础单元大小,则之前的组合占一个基础单元(无论填不填满)。然后从下一个变量开始重新进行组合,以此类推,直到结束。
-
可以合理节省内存,有必要吗?;
-
指针占4个字节,(char*、double*) 也即是四个字节;
三、过程
1、环境下各种变量类型的大小
//环境下各种变量类型的大小 cout << "sizeof(int):" << sizeof(int) << endl; cout << "sizeof(signed):" << sizeof(signed) << endl; cout << "sizeof(signed int):" << sizeof(signed int) << endl; cout << "sizeof(short):" << sizeof(short) << endl; cout << "sizeof(long):" << sizeof(long) << endl; cout << "sizeof(long long):" << sizeof(long long) << endl; cout << "sizeof(unsigned int):" << sizeof(unsigned int) << endl; cout << "sizeof(unsigned short):" << sizeof(unsigned short) << endl; cout << "sizeof(unsigned long):" << sizeof(unsigned long) << endl; cout << "sizeof(unsigned long long):" << sizeof(unsigned long long) << endl; cout << "sizeof(float):" << sizeof(float) << endl; cout << "sizeof(double):" << sizeof(double) << endl; cout << "sizeof(long double):" << sizeof(long double) << endl; cout << "sizeof(char):" << sizeof(char) << endl; cout << "sizeof(char16_t):" << sizeof(char16_t) << endl; cout << "sizeof(char32_t):" << sizeof(char32_t) << endl; cout << "sizeof(wchar_t):" << sizeof(wchar_t) << endl; cout << "sizeof(bool):" << sizeof(bool) << endl; cout << "sizeof(byte):" << sizeof(byte) << endl;
结果如下
类型 | 大小 |
---|---|
sizeof(int) | 4 |
sizeof(signed) | 4 |
sizeof(signed int) | 4 |
sizeof(short) | 2 |
sizeof(long) | 4 |
sizeof(long long) | 8 |
sizeof(unsigned int) | 4 |
sizeof(unsigned short) | 2 |
sizeof(unsigned long) | 4 |
sizeof(unsigned long long) | 8 |
sizeof(float) | 4 |
sizeof(double) | 8 |
sizeof(long double) | 8 |
sizeof(char) | 1 |
sizeof(char16_t) | 2 |
sizeof(char32_t) | 4 |
sizeof(wchar_t) | 2 |
sizeof(bool) | 1 |
sizeof(byte) | 1 |
2、验证结构体和类//编写7个结构体
struct mStur1 //12 { char a; short b; int c; int d; }; struct mStur2 //16 { char a; short b; short b2; int c; int d; }; struct mStur3 //12 { short a; short b; int c; int d; }; struct mStur4 //16 { short a; int b; short c; int d; }; struct mStur5 //16 { short a; int b; short c; char* d; }; struct mStur6 //24 { int a; double b; int c; }; struct mStur7 //12 { int a; double* b; int c; }; //求出大小 cout << "sizeof(mStur1):" << sizeof(mStur1) << endl;//12 cout << "sizeof(mStur2):" << sizeof(mStur2) << endl;//16 cout << "sizeof(mStur3):" << sizeof(mStur3) << endl;//12 cout << "sizeof(mStur4):" << sizeof(mStur4) << endl;//16 cout << "sizeof(mStur5):" << sizeof(mStur5) << endl;//16 cout << "sizeof(mStur6):" << sizeof(mStur6) << endl;//24 cout << "sizeof(mStur7):" << sizeof(mStur7) << endl;//12 //结果 //sizeof(mStur1):12 //sizeof(mStur2):16 //sizeof(mStur3):12 //sizeof(mStur4):16 //sizeof(mStur5):16 //sizeof(mStur6):24 //sizeof(mStur7):12 //把结构体换成类之后的结果,发现是一样的! sizeof(mClas1):12 sizeof(mClas2):16 sizeof(mClas3):12 sizeof(mClas4):16 sizeof(mClas5):16 sizeof(mClas6):24 sizeof(mClas7):12