c++8.sizeof和内存对齐
大约 2 分钟
class Base {
public:
int publicVar;
char charVar;
double doubleVar;
};
class Derived : public Base {
public:
int derivedVar;
};
#include <iostream>
int main() {
std::cout << "int: " << sizeof(int) << " bytes" << std::endl;
std::cout << "char: " << sizeof(char) << " bytes" << std::endl;
std::cout << "double: " << sizeof(double) << " bytes" << std::endl;
std::cout << "Size of Base: " << sizeof(Base{}) << " bytes" << std::endl;
std::cout << "Size of Derived: " << sizeof(Derived) << " bytes" << std::endl;
system("pause");
return 0;
}
假设 int
占用4字节,char
占用1字节,double
占用8字节。在一般情况下,对于上述的 Base
和 Derived
类:
Base
类的大小:4 + 1 + 8 = 13
字节。Derived
类的大小:13 + 4 = 17
字节。
- 打开工具并且cd到你的代码目录
cd D:\UE5PJ2\CodeTest\ConsoleApplication1\ConsoleApplication1
- 使用dir检查目录文件
- 输入命令 即可列出对象模型。
cl /d1 reportSingleClassLayout类名 文件名.cpp
class Base {
public:
int publicVar;
double doubleVar;
char charVar;
};
第一种情况:
class Base {
public:
int publicVar; // 4 bytes
char charVar; // 1 byte + 3 bytes padding
double doubleVar; // 8 bytes
};
总大小:4 + 1 + 3 (padding) + 8 = 16 bytes
第二种情况:
class Base {
public:
int publicVar; // 4 bytes + 4 bytes padding
double doubleVar; // 8 bytes
char charVar; // 1 byte + 7 bytes padding
};
总大小:4 + 4 (padding) + 8 + 1 + 7 (padding) = 24 bytes