struct和union内存计算

本文详细解析了计算机内存中的基本变量类型(如bool、char等)占用空间,以及struct和union的内存计算规则。通过实例说明了不同类型和结构体的内存占用,包括空struct、非空struct和union的内存计算方法,帮助理解内存管理原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本变量类型内存

一般情况下:
bool 1字节
char 1字节
int 4字节
float 4字节
short 2字节
double 8字节
long 8字节

const char* str = "hello";
char str2[] = "he";
cout << sizeof(str) << endl;  //指针占4字节
cout << sizeof(str2) << endl; //3字节
cout << sizeof("hello") << endl; //6字节

struct内存计算方式

空struct占用1字节
非空struct按照最长字节的变量内存对齐,所有变量内存之和即为struct的内存大小

struct stru1 {
	int a;
};    //4字节

struct stru1 {
	char c;
};  //1字节

struct stru2 {
	char c;
	int a;
};  //8字节(其中char 按照4字节对齐)

union内存计算方式

union联合体所有成员共享一段内存,内存对应按照最长字节的变量内存对齐,对齐后的内存即为struct内存大小

struct stru {
	char c;
	int a;
};  //8字节

union uni{
	char c;
	int a;
};  //4字节

union U{
    char s[9];
    int n;
    double d;
}; //16字节
 
void func() {
	const char* str = "hello";
	char str2[] = "he";
	struct stru st = { 0 };
	union uni un = { 0 };
	cout << sizeof(str) << endl;
	cout << sizeof(str2) << endl;
	cout << sizeof("hello") << endl;
	cout << sizeof(st) << endl;  //结果为 8
	cout << sizeof(un) << endl;  //结果为4
}

结构体中含有static静态变量时,其存储在数据区,不占用struct栈的空间,因此不算在struct内存中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值