0

我正在研究包含日期和时间的自定义类。该课程的主要目标是达到最佳表现。我的目标平台是Linux 目前,我拥有这样的成员

Year - int
Month - int
Day - int
Hour- int
Min - int
Sec - double (because I need milisecs as well).

我现在在想的是太改变类型来跟随

   Year - unsigned short
    Month - unsigned char
    Day - unsigned char
    Hour- unsigned char
    Min - unsigned char
    Sec - unsigned char
    Milisec - unsigned short

这给了我 2 + 1 + 1 + 1 + 1 + 1 + 2 = 9 个字节。正如您已经猜到的那样,我想将我的班级放入 8 个字节(没有其他成员)。那么解决它的最佳方法是什么,合并(例如秒和毫秒)并使用位掩码来检索值?会影响性能吗?如果用户将整数传递给一些 setter,类型转换也会影响性能吗?

提前感谢。

4

2 回答 2

2

您有多种选择。最紧凑的方法是使用整数时间戳。不过,解压它需要一些处理。另一种选择是使用 C++ 位域来更紧密地打包。例如,月只需 4 位,日 5 位,分钟和秒 6 位。它应该让事情变得更慢一些,但只是在理论上。这完全取决于您拥有的这些日期的数量以及您将对它们执行的处理数量和类型。在某些情况下,struct由于更高的内存吞吐量和更好的缓存利用率,将位域紧密打包会提高性能。在其他情况下,位操作可能会变得更加昂贵。与性能一样,最好不要猜测,而是衡量

于 2013-10-17T09:15:47.677 回答
0

这里最简单的方法是将一对 sec 和 millisec 放入一个 int(两个字节)中。您不需要单独的 Sec (unsigned char) 和 Milisec (unsigned short),因为您可以将 0 到 60000 之间的数字放入一个 unsigned short 中。

我们称它为milliSecPack(无符号短)。

milliSecPack = 60 * Sec + Milisec;

Sec = milliSecPack / 1000;
Milisec = milliSecPack % 1000;
于 2013-10-17T09:24:31.877 回答