如何在运行时计算数据类型翻转前允许的最大值?

How to calculate at runtime the maximum value allowed before datatype rollover?

我有以下结构:

struct Some_Struct {
    uint32_t a;
    int16_t  b;
    uint8_t  c;
};

struct Other_Struct {
    uint32_t a;
    uint32_t b;
    uint32_t c;
};

变量大小计算如下:

uint32_t size = sizeof(Some_Struct) + sizeof(Other_Struct) * n;

我的问题是,给定 sizeof Some_Struct 和 Other_Struct 其实际大小取决于平台、体系结构和包装,我如何在运行时确定最大数量在 size 翻车之前允许 n

您可以使用 numeric_limits:

uint32_t maximum_n = (std::numeric_limits<uint32_t>::max() - sizeof(Some_Struct))
                                / sizeof(Other_Struct);