繁体   English   中英

如何使用不同的数据类型达到最佳性能?

[英]How to reach best performence with different data types?

我正在处理自定义类,它包含日期和时间。 该课程的主要目标是达到最佳表现。 我的目标平台是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,那么类型转换会影响性能吗?

谢谢你提前。

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

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

我们称之为milliSecPack(unsigned short)。

milliSecPack = 60 * Sec + Milisec;

Sec = milliSecPack / 1000;
Milisec = milliSecPack % 1000;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM