考虑以下代码:

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/

10-13 00:53