第2.7章: sizeof

English

什么是 sizeof?

C++ 中的 sizeof 运算符返回某个类型或对象的大小(以字节计)。 它的结果类型始终是 ::std::size_t,这是一个无符号整数类型,保证能容纳任何对象大小。 对基础类型而言,sizeof 在编译期求值,是一个常量表达式。

基础示例


#include <fast_io.h>
#include <cstddef>
#include <cstdint>
#include <cstdfloat>

int main()
{
    using namespace ::fast_io::iomnp;

    ::std::size_t sz1 = sizeof(::std::size_t);
    ::std::size_t sz2 = sizeof(::std::int32_t);
    ::std::size_t sz3 = sizeof(double);
    ::std::size_t sz4 = sizeof(::std::float64_t);
    ::std::size_t sz5 = sizeof(::std::float32_t);
    ::std::size_t sz6 = sizeof(::std::bfloat_t);

    println("sizeof(::std::size_t) = ", sz1);   // equals architecture byte size (8 on 64-bit, 4 on 32-bit)
    println("sizeof(::std::int32_t) = ", sz2);  // formula: 32/8 = 4
    println("sizeof(double) = ", sz3);          // typically 8
    println("sizeof(::std::float64_t) = ", sz4); // 64/8 = 8
    println("sizeof(::std::float32_t) = ", sz5); // 32/8 = 4
    println("sizeof(::std::bfloat_t) = ", sz6);  // 16/8 = 2
}

要点:sizeof 的结果始终是 ::std::size_t 值。 在典型的 64 位系统上:

公式

对固定宽度的整数与浮点类型,大小遵循一个简单的公式:

对 ::std::size_t 而言,大小等于架构的字节宽度: 32 位系统上是 4 字节,64 位系统上是 8 字节。

运算符特性

延伸阅读

完整细节见 cppreference:sizeof 以及 cppreference:固定宽度浮点类型 。