gpt4 book ai didi

c - GCC过度优化?自纪元开始以来的不同秒数取决于我在哪里编译

转载 作者:太空宇宙 更新时间:2023-11-04 05:19:55 25 4
gpt4 key购买 nike

背景故事:我在尝试解决时间转换问题。我正在处理的程序使用内部日期表示。日期表示为自 2000/01/01 以来的秒数。该数字在程序中是恒定的。我的猜测是,它不应该,因为该数字可能取决于时区。

我做了一个简单的程序,测试自 2000/01/01 的 unix 纪元开始以来的秒数在不同机器上是否不同:

struct tm tm_date;
time_t t_LongDate;

tm_date.tm_year = 2000 - 1900;
tm_date.tm_mon = 1 - 1;
tm_date.tm_mday = 1;
tm_date.tm_hour = 0;
tm_date.tm_min = 0;
tm_date.tm_sec = 0;

t_LongDate = mktime(&tm_date);
printf("result: %lld\n", (long long)t_LongDate);

return 0;

我在我的开发机器上编译了这个程序,它似乎可以工作:

结果:946681200

然后我将二进制文件上传到有问题的主机。这反驳了我的假设。秒数相同:

problematic-host# ./a.out 
result: 946681200

因为我是一个可疑的人,所以我尝试在有问题的主机上重新编译程序。没有期望太多,但是:

problematic-host# gcc secSinceEpoch.c 
problematic-host# ./a.out
result: 946677600

正如我最初预料的那样 - 时间差了。但是发生了什么事? GCC 是否优化了我的小程序以仅输出一个常数值,因为它不依赖于任何用户输入或随机源?它会在我真正的大程序中做同样的事情吗?有什么方法可以强制它实际运行这些功能吗?

最佳答案

您不会初始化 tm_date 的每个字段,例如 tm_isdst,因此某些字段具有不可预测的值。修复错误,谜团就会消失。

关于c - GCC过度优化?自纪元开始以来的不同秒数取决于我在哪里编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15127161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com