c++ 中关于 sizeof 用法有好多示例,用来计算变量的大小
1、c++ 中变量的大小
变量大小的按自定义类型或数组大小作为实际大小
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
int main()
{
int a = 10;
char buf[10];
std::cout << "size var:" << sizeof(a) << std::endl;
std::cout << "size buf:" << sizeof(buf) << std::endl;
}
2、c++ 中类大小
包含空类、虚函数、继承大小计算,由此可以得到空类的大小为1个字节、如果类中存在虚函数则类中包含虚函数指针,因此大小为4个字节,如果在继承类型且是普通继承的话,类的大小为父类和子类成员变量的大小,如果是虚函数继承,则在32位中虚函数指针4字节,64位中虚函数指针8字节。
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
class test {
};
class test_virtual{
public:
test_virtual() = default;
virtual void fun() {};
virtual ~test_virtual() {
}
};
class MyClass:public virtual test_virtual
{
public:
virtual void my_func() {
}
MyClass()=default;
~MyClass()=default;
};
int main()
{
std::cout << "sizeof class :" << sizeof(test) <<" test_virtual:"<<sizeof(test_virtual)<<"sizeof MyClass:"<<sizeof(MyClass)<< std::endl;
}
3、Union 的sizeof 计算
Union 联合体,一般计算最长数据类型的大小,但是要注意一点的是数据在内存当中的字节对齐优化,计算的方式:联合体中最长变量的字节数必须可以整除最长变量类型!
在 MyUnion 中最长的变量类型int 是4字节,最长的变量字节数为 4字节,所以 sizeof(MyUnion)=4
在MyUnion_2 中最长的变量类型int 是4字节,最长的变量字节数为 16字节,所以 sizeof(MyUnion_2 )=16
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
union MyUnion
{
char i;
int len;
};
union MyUnion_2
{
char va[9];
int len[4];
char i;
};
int main()
{
std::cout <<";MyUnion size:"<<sizeof(MyUnion)<< "MyUnion_2 size"<< sizeof(MyUnion_2) <<std::endl;
}
4、sizeof 和 strlen 的区别
int main()
{
int a = 10;
char buf[10];
std::string str = "hello";
std::cout << strlen(str.c_str()) << std::endl;
std::cout << "size var:" << sizeof(a) << "strlen buf:"<<strlen(buf) << std::endl;
}
由于本人经验有限制,如有问题,欢迎修正