考虑以下代码:
struct CExample {
int a;
}
int main(int argc, char* argv[]) {
CExample ce1;
CExample ce2;
cout << "Size:" << sizeof(ce1) << " Address: " << &ce1 << endl;
cout << "Size:" << sizeof(ce2) << " Address: " << &ce2 << endl;
CExample ceArr[2];
cout << "Size:" << sizeof(ceArr[0])<< " Address: "<< &ceArr[0] <<endl;
cout << "Size:" << sizeof(ceArr[1])<< " Address: "<< &ceArr[1] <<endl;
return 0;
}
输出示例:
ce1:大小=4,地址:0039FAA0
ce2:大小=4,地址:0039FA94
ceArr[0]:大小=4,地址:0039FA84
ceArr[1]:大小=4,地址:0039FA88
在代码中,前两个对象(ce1 和 ce2)的地址之间有 12 个字节,但数组中的对象之间只有 4 个字节的差异。
我认为数据对齐与这个问题有关,但我仍然很难过。知道这里发生了什么吗?
最佳答案
因为数组中的对象必须是连续的。尽管可以,但是在堆栈上连续声明的对象(在源代码中,不是计算机中)不是[必需是连续的]。
关于c++ - 了解 C++ 结构体大小,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4640362/