c++ 基础5、关于sizeof的用法

本文详细介绍了C++中的sizeof运算符的使用,包括计算变量、类、Union的大小,以及与strlen的区别。示例代码展示了如何计算不同类型的大小,并讨论了内存对齐和虚函数的影响。此外,还提到了在计算Union大小时要考虑最长数据类型的字节数和内存对齐规则。
摘要由CSDN通过智能技术生成

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;
}

由于本人经验有限制,如有问题,欢迎修正

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值