我的C ++类具有string和int的数据成员。我以为它的大小是36个字节,但输出显示40个字节。有人可以解释吗?
#include <iostream>
using namespace std;
class SizeTest {
private:
std::string name;
int i;
};
int main(int argc, char** argv) {
cout<<"sizeof(SizeTest) is : " << sizeof(SizeTest)<<endl;
}
输出:
sizeof(SizeTest) is : 40
有人可以解释吗?
sizeof
总是返回正确的大小。因此,我们可以推断出您对尺寸的期望是错误的。
您没有解释您为什么认为自己做了什么,但是最有可能导致错误的原因是没有考虑内存对齐。
我认为,字符串是32字节
它可以在某些系统上。并非在所有系统上都是如此。
并且int是4个字节。
它可以在某些系统上。并非在所有系统上都是如此。
所以sizeof(SizeTest)应该是36个字节
没有类的大小不是“应该”等于其成员大小的总和。
std::string name;
int i;
std::string
包含一个指向数组的指针,以及2个指针或size_t
用于大小和容量。在64位平台上,它们是64位类型,因此std::string
必须对齐8个字节,因此您的类也是8字节对齐的。在您的实现中,std::string
是32字节类型(并非适用于所有实现),而int是4字节类型,这使得总大小为36字节
结果必须添加4个字节的填充以将大小四舍五入为8的下一个倍数,以便在将数组放入数组时,该类的所有实例都正确对齐。结果是一个40字节的类
另请参阅Why isn't sizeof for a struct equal to the sum of sizeof of each member?