基本类型大小,类大小及内存对齐

讨论类大小时,我们设置系统为64位系统

1)空类 1字节

空类中只包含一个内存地址,保存类对象的唯一地址

空类
对于一个空类,即使没有任何成员变量,编译器也会为其分配1字节的内存,以确保不同对象的地址唯一性

2)包含虚函数的类

a) 只包含一个/多个虚函数的类 8字节
每个类的实例只会包含一个指向虚函数表(vtable)的指针(vptr)
无论该类中有多少个虚函数。vptr 的大小取决于系统的指针大小

b) 继承a)的类 8字节
实例大小仍然为8字节,因为只有一个vptr,且派生类共享基类的vptr。

3)例子


class BaseClass {
public:
	int val;
	//int val1;
	virtual void someFunction() {}
	virtual void someFunction2() {}
	int* ptr;

};

class a :public BaseClass
{
	double ff;
};

sizeof(BaseClass)=24
4+(4空:内存对齐)+8+8=24

sizeof(a)=32

4)在64位系统下,C++中常用的基本类型和一些标准库类型的大小如下:

基本类型
布尔类型 (bool):
大小:1字节
字符类型 (char, signed char, unsigned char):
大小:1字节
整数类型:
short (或 short int):
大小:2字节
int:
大小:4字节
long:
大小:8字节
long long:
大小:8字节
unsigned short:
大小:2字节
unsigned int:
大小:4字节
unsigned long:
大小:8字节
unsigned long long:
大小:8字节
浮点类型:
float:
大小:4字节
double:
大小:8字节
long double:
大小:通常为16字节,但有些编译器可能实现为12字节或8字节
指针类型
任何类型的指针:
大小:8字节
标准库类型
std::string:
实际大小取决于实现,但通常包含一个指针(8字节)和一些其他管理信息(如长度、容量等)。因此,std::string 的最小大小通常大于8字节。
std::vector:
包含三个指针(指向数据的开始、结束和容量的结束),因此最小大小为24字节(3个指针,每个8字节)。
std::unique_ptr:
大小:8字节(一个指针)
std::shared_ptr:
大小:16字节(两个指针,一个指向对象,一个指向控制块)
std::weak_ptr:
大小:16字节(两个指针,一个指向控制块,一个用于管理引用计数)

posted on   不败剑坤  阅读(8)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示