以 32 位编译环境的字节大小为例。

  • 1B: charbool
  • 2B: short
  • 4B: intlongfloat 、指针
  • 8B: doublelong long

另外 string 所占字节大小根据库所实现的不同而有所差异,但在同一库中都为固定的。

结构体内存对齐规则

  1. 类内成员存放的起始相对地址必须是其对齐大小的整数倍。
  2. 类的占用大小必须是其最大成员变量对齐大小的整数倍;如不是,则需上调。
  3. C++ 类类型的对齐大小是其最大成员对齐大小,内置类型的对齐大小则是其类型大小。

根据以上规则可以很容易推断以下代码中结构体的内存大小。

struct A{
    char a;
    int b;
    double c;
};
struct B{
    char a;
    A A1;
};
int main() {
    std::cout << sizeof(A) << std::endl;    // 16
    std::cout << sizeof(B) << std::endl;    // 24
    return 0;
}

但注意,如果改变结构体内变量的声明顺序,结构体的内存大小将有变化。

struct A{
    char a;
    double c;
    int b;
};
struct B{
    char a;
    A A1;
};
int main() {
    std::cout << sizeof(A) << std::endl;    // 24
    std::cout << sizeof(B) << std::endl;    // 32
    return 0;
}
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

ArMiku@安然 微信支付

微信支付

ArMiku@安然 支付宝

支付宝

ArMiku@安然 贝宝

贝宝