【发布时间】:2017-03-04 09:14:59
【问题描述】:
在我的应用程序中,我必须在二进制文件上编写一些数据结构,其中很多都包含枚举。我应该将枚举转换为可能的最小类型(qint8)还是应该坚持使用 32 位(qint32)?
它会产生积极或消极的影响吗?我最关心的是速度而不是空间。
QDataStream& operator<<(QDataStream &out, const Event &event)
{
out << (qint8)event.myEnum;
//Also write other fields...
}
我看过一些建议反对这种优化的帖子(this 和this one),但它们是关于内存而不是磁盘写入的。
编辑:澄清:当使用QDataStream 时,我无法直接写入或读取enum,我必须将其转换为整数类型。我假设 8 位就足够了,因为在我的上下文中总是会有少于 127 个值(而且我也在使用 -1)。
【问题讨论】:
-
您为什么认为
qint8足够大?说真的,让编译器决定底层类型。它知道自己在做什么。 -
通常磁盘是块设备(例如 512 字节)。这意味着您在将数据写入磁盘之前首先缓存数据(顺便说一下,这是由 SO 完成的)。这样一来,有很多话要说。所以,我只提供一个论点:你通过内存间接管理这个文件,这意味着任何关于内存的建议都是有效的。当然,如果你需要写很多东西,事情可能会发生变化。最好的答案是分析它。
-
“8 位就足够了,因为 [...] 总是会有少于 127 个值” - 嗯...
enum E { E_e = 256; };另外,符号扩展会导致输入数据损坏。 -
@IInspectable - 256 怎么小于 127?
-
@ddriver: 256 肯定不小于 127。但是,1 是,这是我示例中的值的数字。