C++,自使用 boost 和 std::chrono 以来的时间?为什么 Boost 版本慢 10 倍?

标签 c++ boost boost-date-time

我想要一个函数来获取自 ns 纪元以来的时间。我有一个使用 boost::ptime 的解决方案:

auto cur_time = ptime(day_clock::universal_day(), return microsec_clock::universal_time().time_of_day());
return (cur_time - date(1970,1,1)).total_microseconds();

我还使用 std::chrono 测试了该解决方案:

return std::chrono::duration_cast< std::chrono::microseconds >(std::chrono::system_clock::now().time_since_epoch()).count();

boost 解决方案比 std::chrono 解决方案慢 10 倍。 (在我的 Linux 机器上是 150ns 与 1500ns)。有没有更好(更快)的方法来获取我缺少的 Boost::datetime 纪元以来的时间?

最佳答案

Boost 是灵活的跨平台代码,libstdc++(可能是您正在使用的标准库)是与您的编译器一起编写的,并且是比 boost::chrono 更新的代码,因此更有可能实现最高效的实现。

我总是建议在可能的情况下以及在标准库实现完成的情况下使用标准库实现而不是 boost。使用单个 #ifdef 在实现之间切换通常相当容易。

关于C++,自使用 boost 和 std::chrono 以来的时间?为什么 Boost 版本慢 10 倍?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51232697/

相关文章:

c++ - boost::date_time, g++-4.7.0, 编译错误

c++ - 如何将分数纪元时间戳( double )转换为 std::chrono::time_point?

c++ - C++ 应用程序中的控制台

c++ - 模板链接列表编译错误

c++ - 为光纤设计高效的 C++ 代码

c++ - 我如何在后台的 dll 中使用 muti boost 线程

c++ - Winsock -> WinRT Windows.Networking.Sockets -- 映射错误代码

c++ - 使用 Boost 的 program_options 处理复杂的选项

c++ - boost::fusion::push_back 的正确用法是什么?

c++ - 构建 MongoDB 时出现 boost::date_time 错误:winapi 不是成员