sizeof总是一样吗?

问题描述 投票:1回答:1

我对类的结构化,填充以及由此产生的类sizeof提出了一个简短的问题。在下面的示例中,在我测试过的每个编译器上,对于sizeof A,结果始终为40个字节,这对我来说很有意义。

#include <iostream>
class A {
    int a, b; // 4 + 4
    short c;  // + 2
    double f; // not currently 8 byte aligned. Currently 10 bytes, so pad 6 extra bytes, so: + 6 + 8
    char w;   // + 1
    bool d;   // + 1
    double g; // not currently 8 byte aligned. Currently 26 bytes, so pad 6 extra bytes, so: + 6 + 8

    // 4 + 4 + 2 + 6 + 8 + 1 + 1 + 6 + 8 = 40
};

int main() {
    std::cout << sizeof( A );
}

我的问题是,这永远都是真的吗? (假设每个成员的alignof和size不变)。我知道我可以对其重新排序,以便double首先出现,并且它缩小为32个字节;但是编译器可以做出此决定吗?还是程序员一贯的责任? (我假设编译器无法重新排序)

c++ sizeof
1个回答
0
投票

不允许编译器对成员重新排序,因为它们都具有相同的访问级别。因此,例如,如果有一个public成员,则编译器可以对您的成员变量重新排序。

参考:https://timsong-cpp.github.io/cppwp/class.mem#19

C ++标准不保证您的类的大小,除了必须保证成员可以单独寻址之外。

© www.soinside.com 2019 - 2024. All rights reserved.