草庐IT

c++ - 返回 int 的 log10 函数的性能

今天我需要一个便宜的log10函数,我只使用了其中的int部分。假设结果是floored,那么999的log10就是2。自己写一个函数有用吗?如果是这样,那条路最好走。假设代码不会被优化。我想到的log10的替代品;使用for循环除以或乘以10;使用字符串解析器(可能非常昂贵);使用整数log2()函数乘以常数。先谢谢你:) 最佳答案 在具有计数前导零或类似指令(这是大多数架构)的任何架构上,该操作可以在(快速)恒定时间内完成。这是我用来计算以10为基数的位数的C代码片段,这本质上是相同的任务(假设使用类似gcc的编译器和32位in

c++ - Boost Log运行时优化

我正在为我的应用程序的日志记录平台使用Boost-Log和全局严重性记录器。分析显示boost::log::v2s_mt_posix::core::open_record最多可以占用总执行时间的25%。我确实有很多日志消息,但我不认为它们会如此昂贵,因为它们是较低的严重性,它们被过滤。有没有办法让这些消息在运行时的开销不那么大?(再次强调:我希望即使在过滤时也会有很小的开销,当然在未过滤时开销会更大)。通过创建一些包装器宏,编译时相对容易“解决”这个问题。更新了示例工作代码:#include#include#include#include#include#include#include

c++ - 如何使用 boost.log 以 dec 格式打印 ProcessID 和 ThreadID

我在我的程序中使用boost.log,默认格式化程序以十六进制格式输出进程ID和线程ID,任何人都知道如何以十进制格式打印它们,谢谢。这是我的代码的github:https://github.com/owenliang/boost_asio,谢谢。boost::log::formatterscope_formatter=boost::log::expressions::stream("TimeStamp","%Y-%m-%d%H:%M:%S")("ProcessID")("ThreadID")("Severity") 最佳答案 Bo

c++ - constexpr log10 整数函数

所以我需要log10功能来查找存储给定整数所需的字符数。但我想在编译时获取它,以根据我的代码中定义的这些整数常量静态确定char数组的长度。不幸的是log10不是constexpr函数,即使是整数版本也是如此。我可以像这样制作一个完整的版本:templateconstexprenable_if_t,size_t>intlen(Tparam){size_tresult{1U};while(T{}!=(param/=T{10}))++result;returnresult;}这最终将允许我这样做:constcharfoo[intlen(13)+1U]是否c++已经为此提供了一个工具,还是我

c++ - std::error_code,my_error::check_block == my_error::validate && my_error::accept_block == my_error::validate

我正在使用std::error_code并定义和注册了一堆错误(使用枚举类)。我有一个非常通用的错误,现在称为my_error::validate,但我想在我的库中提供更具体的版本。通常人们会想要使用:if(ec==bc::error::validate)//...但是有时他们可能希望看到与该std::error_code关联的特定错误或打印错误消息。//ec.message()says"check_block()failedtodoXYZ"assert(ec==bc::error::check_block);我希望能够启用如下功能:if(ec==bc::error::validate

c++ - Log4cplus真的这么慢吗?

我一直在用C++测试我的日志子系统的三个选项。一个是Log4cplus,一个是Pantheios,最后一个是我们自己编写的简单日志记录库。Log4cplus比其他两个慢得多。以下是记录1,000,000个日志条目的结果:log4cplus:200秒编辑:设置缓冲区大小将其减少到120秒我的记录器:55秒Pantheios:35秒我想知道我是否遗漏了任何性能调整。我应该补充一点,我一直在使用根记录器,我正在记录到文件并记录:LOG4CPLUS_INFO(rootLogger,"用文本替换我!");谢谢,礼萨 最佳答案 在perform

C++: "my text"是 std::string、*char 还是 c 字符串?

我刚刚做了看起来是acommonnewbiemistake的事情:首先我们阅读oneofmanytutorials是这样的:#includeintmain(){usingnamespacestd;ifstreaminf("file.txt");//(...)}其次,我们尝试在我们的代码中使用类似的东西,它是这样的:#includeintmain(){usingnamespacestd;std::stringfile="file.txt";//Orgetthenameofthefile//fromafunctionthatreturnsstd::string.ifstreaminf(fi

c++ - 为什么 ofstream ("log.txt", ios::app|ios::trunc);总是失败?

以下代码是在Windows7x64上使用VC++2012年11月CTP编译的。#includeusingnamespacestd;intmain(){ofstreamfout("log.txt",ios::app|ios::trunc);if(!fout){coutThecppreference.comwebsite并没有说ios::app不能与ios::trunc组合。ios::app和ios::trunc的确切语义是什么? 最佳答案 传递这些标志的filebuf构造函数†具有基于C++11表132中定义的那些标志的行为:+---

c++ - g++-4.8 中缺少 AVX 日志内在函数 (_mm256_log_ps)?

我试图在我的代码中使用一些AVX内在函数,但遇到了对数内在函数的障碍。使用适用于Linux的IntelIntrinsicsGuidev3.0.1,我看到内在_mm256_log_ps(__m256)被列为“immintrin.h”的一部分,并且在我当前的arch上也受支持。然而,尝试编译这个简单的测试用例失败并显示“错误:‘_mm256_log_ps’未在此范围内声明”这个例子是用g++-4.8-march=native-mavxtest.cpp编译的#includeintmain(){__m256i;_mm256_log_ps(i);}我是否遗漏了一些基本的东西?某些内在函数是否不受

c++ - Boost.Log 配置文件

我正在向旧的C++程序添加日志记录。经过一番研究,我决定使用BoostLog.该文档充满了创建接收器和过滤器的示例。但是,我找不到任何日志配置文件的示例。有没有办法从一个不需要编译的文件配置日志记录?类似于log4net有什么?还是Python(好吧,反正Python还没有编译...)? 最佳答案 终于找到了官方文档,不是最近才加的,就是隐藏的太好了,之前没看到:http://www.boost.org/doc/libs/1_57_0/libs/log/doc/html/log/detailed/utilities.html#log