在磁盘上写入时,我应该使用最小的类型吗?

时间:2017-03-03 13:55:45

标签: c++ qt enums

在我的应用程序中,我必须在二进制文件上编写一些数据结构,其中很多都包含枚举。我应该将枚举转换为可能的最小类型(qint8)还是应该坚持32位(qint32)?

它会产生积极或消极的影响吗?我最关心的是速度,而不是空间。

QDataStream& operator<<(QDataStream &out, const Event &event)
{
    out << (qint8)event.myEnum;
    //Also write other fields...
}

我看到一些帖子建议不要进行这种优化(thisthis one),但它们是关于内存而不是磁盘写入。

编辑:澄清一下:使用QDataStream时,我无法直接编写或读取enum,我必须将其转换为整数类型。我假设8位是足够的,因为在我的上下文中总会有少于127个值(我也使用-1)。

2 个答案:

答案 0 :(得分:2)

使用最小的类型是有帮助的,因为您减少了流数据速率,并且它需要更少的时间和精力(想想移动!)来写出来。如果您的代码生成的数据比磁盘消耗的速度慢,那么如果使用更大的类型,则挂起时间不会发生变化,但是您选择的较大数据类型的能耗仍然会更高。

总的来说,我更担心你的序列化是否是未来的证明 - 确保你的文件版本在适当的级别(例如整个文件的一个版本,或每个子版本的版本,甚至版本)每个结构 - 取决于代码的结构和意义。

答案 1 :(得分:1)

如果您只需要一个字节,那么使用一个字节。 QDataStream当然可以解决字节解析问题。这没有任何缺点,如果你序列化很多这些对象,你会看到切实的好处。