繁体   English   中英

如何在64位系统上以32位宽度存储时间?

[英]How to store time in 32bit width on 64bit system?

我的结构如下:

typedef struct  ERROR_LOG_EVENT
{
    time_t time;
    uint32_t count;
    int32_t error_type;
} ERROR_LOG_EVENT;

我将此结构存储在非易失性存储器中。 在32位系统上,由于time_t宽度为4个字节(32位),因此一切正常。

但是在64位系统上, time_t变为8bytes(64bit)宽。

在64位系统上,是否可以将时间存储在4byte(32bit) 我可以用始终保证为32位的值替换上述结构的time_t time成员吗?

如果优化内存空间是您的目标(以降低访问速度为代价,并且时间限制为2106),那么您应该将结构定义为packed以抑制填充:

typedef struct __attribute__((__packed__)) ERROR_LOG_EVENT {
    uint32_t time;
    uint32_t count;
    int32_t error_type;
} ERROR_LOG_EVENT;

然后像这样分配它: ERROR_LOG_EVENT.time = <time_t> & 0xFFFFFFFF;

调整您的代码以正确处理64位时间戳。 具体来说,写一些看起来像

typedef struct  ERROR_LOG_EVENT
{
    int64_t time;
    uint32_t count;
    int32_t error_type;
} ERROR_LOG_EVENT;

并强制您的32位代码使用此代码。 不要尝试使用32位整数存储时间间隔。 那总是一个坏主意,那是在您遇到“哦,设计要求发生变化,我们实际上想节省纳秒而不是秒”的问题之前。

使用uint32_t 如果这些是Unix纪元时代,这将足以用来存储没有时间戳比一年2105。

暂无
暂无

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

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