我的结构如下:
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
变为8字节(64位)宽。
有没有办法在64位系统上的4byte(32bit)
存储时间?
我可以用总是保证为32位的东西替换上述结构的time_t time
成员吗?
答案 0 :(得分:1)
如果您的目标是内存空间优化(代价是访问速度较慢,时间限制为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;
答案 1 :(得分:0)
调整代码以正确处理64位时间戳。具体来说,写一些看起来像
的东西typedef struct ERROR_LOG_EVENT
{
int64_t time;
uint32_t count;
int32_t error_type;
} ERROR_LOG_EVENT;
并强制您的32位代码使用此代码。不要尝试使用32位整数存储时间间隔。这总是一个坏主意,并且在你遇到问题之前就已经过了oh;哦,设计要求发生了变化,我们实际上想要节省纳秒,而不是秒......&#34; / p>
答案 2 :(得分:-1)
使用uint32_t
。如果这些是unix纪元时间,那么这将足以存储不比2105年further的时间戳。