所以,我的博士项目依赖于我已经构建了近3年的一款软件。它可以运行,很稳定(不会崩溃或抛出异常),我正在使用发布版本。但我意识到有一个巨大的性能问题,因为我过度依赖boost::iequals。我知道,在SO上有很多关于这个的内容,这不是一个关于如何做的问题,而是为什么会发生这种情况。考虑以下内容:
我使用了valgrind和cachegrind测试了这段代码,令我惊讶的是,boost的速度比本地posix或std方法慢了4倍(std方法似乎使用了相同的posix)。即使考虑到C++提供的安全保障,四倍速度差距也很大。为什么会出现这种情况?我希望其他人能运行这段代码并解释是什么导致了性能损失。是所有分配造成的吗?(从调用映射中看来确实如此)我不是在批评boost,我喜欢并且无处不用它。编辑:这张图表阐述了我的意思。
#include <string.h>
#include <string>
#include <boost/algorithm/string.hpp>
void posix_str ( )
{
std::string s1 = "Alexander";
std::string s2 = "Pericles";
std::cout << "POSIX strcasecmp: " << strcasecmp( s1.c_str(), s2.c_str() ) << std::endl;
}
void boost_str ( )
{
std::string s1 = "Alexander";
std::string s2 = "Pericles";
std::cout << "boost::iequals: " << boost::iequals( s1, s2 ) << std::endl;
}
int main ( )
{
posix_str();
boost_str();
return 0;
}
我使用了valgrind和cachegrind测试了这段代码,令我惊讶的是,boost的速度比本地posix或std方法慢了4倍(std方法似乎使用了相同的posix)。即使考虑到C++提供的安全保障,四倍速度差距也很大。为什么会出现这种情况?我希望其他人能运行这段代码并解释是什么导致了性能损失。是所有分配造成的吗?(从调用映射中看来确实如此)我不是在批评boost,我喜欢并且无处不用它。编辑:这张图表阐述了我的意思。