基本变量类型内存
一般情况下:
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内存中