[英]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.