C++sizeof的各种玩法

16:23:44
/*1.
基本类型 */ size_t len = sizeof(char);//1 len = sizeof(float);//4 len = sizeof(int);//4
len = sizeof(long);//4
len = sizeof(double);//8 /*2.容易误导类型*/ const char* str = "123456"; len = sizeof(str);//4 len = sizeof(*str);//1 /*3.类与结构体类型(空) */ struct {}S_t, * PS_t; class {}C_t; size_t len = sizeof(S_t);//1 len = sizeof(PS_t);//4 len = sizeof(C_t);//1


/*4.类与结构体类型(成员排布导致内存变换类型) ,当前内存对齐设置为8时候*/

struct {
int x = 0;
char y = 0;
double d = 0.00;
}S_t, * PS_t;


struct
{
int x = 0;
double d = 0.00;
char y = 0;

}T_t,*PT_t;

size_t len = sizeof(S_t);//16 【4+1(浪费3) + 8】

len = sizeof(T_t);//24 【4 + (浪费4) + 8 + 1+(浪费7)】

 

/*4.1类与结构体类型(扩展关系类型误区)*/
struct {
char y = 0;
char& x = y;
char& x1 = y;
}S_t, * PS_t;

int main()
{
size_t len = sizeof(S_t);//12【内存要表示一种关系,一般用4字节,多种关系相应增加;但是跟类的纯虚函数有一定区别,可以继续往下看】
len = sizeof(PS_t);//4
return 0;
}

 

/*5.类带有继承的性质,可以说比较难理解*/
class CB {};//空基类
class CS1:public CB{};//空子类
class CS2 :public CS1 { char c = 0; };//非空子类


class CS3 :public CB {
virtual void fun() = 0; virtual void fun2() = 0;
};
class CS4 :public CS2 {
virtual void fun() = 0; virtual void fun2() = 0;
};


int main()
{
size_t len = sizeof(CB);//1
len = sizeof(CS1);//1
len = sizeof(CS2);//1

len = sizeof(CS3);//4[纯虚函数认为是一个指针,但是多个纯虚函数依旧算一个指针的大小]
len = sizeof(CS4);//8【4 + 1(浪费的3)】
return 0;
}





 

posted @ 2021-06-06 16:55  默*为  阅读(64)  评论(0编辑  收藏  举报