如何在运行时计算数据类型翻转前允许的最大值?
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);
我有以下结构:
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);