各种不区分大小写的字符串比较性能

Ælex

因此,我的phd项目依赖于我已经开发了近3年的软件。它运行稳定,不会崩溃或抛出异常,并且我正在使用它的发行版。而且我已经意识到性能受到了很大的影响,因为我对boost :: iequals的依赖度很高。我知道,对此有很多意见,这不是如何执行的问题,而是为什么会发生这种情况。考虑以下:

#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(似乎使用相同的posix)方法慢4倍。即使考虑到C ++提供了很好的安全网,现在也有四倍了。这是为什么?我真的很希望其他人来做这个,并向我解释是什么让这种性能受到打击。是否所有分配(似乎来自于调用方映射)。我不喜欢增强功能,我喜欢它,可以在任何地方和任何地方使用它。编辑:此图显示了我的意思

斯巴比

Boost::iequals具有区域设置意识。你可以从它的定义见这里需要的是默认为一个可选的第三个参数缺省构造的 std::locale,表示当前全球C ++语言环境,如设置std::locale::global

这或多或少意味着编译器无法事先知道将使用哪个语言环境,这意味着将间接调用某个函数以将每个字符转换为当前语言环境中的小写字母。

在另一方面,该文档strcasecmp规定:

在POSIX语言环境中,strcasecmp()和strncasecmp()的行为应类似于将字符串转换为小写字母,然后执行字节比较。在其他语言环境中未指定结果。

这意味着该语言环境是固定的,因此可以期望它会得到优化。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

字符串不区分大小写的模式匹配

来自分类Dev

C ++中不区分大小写的标准字符串比较

来自分类Dev

如何比较不区分大小写和不区分重音的字符串

来自分类Dev

如何使字符串比较不区分大小写?

来自分类Dev

区分大小写的字符串比较

来自分类Dev

C ++ 11是否引入了不区分大小写的字符串比较算法?

来自分类Dev

不区分大小写的排序集-区分大小写保留相同的字符串

来自分类Dev

C#文件路径字符串比较不区分大小写

来自分类Dev

不区分大小写的字符串数组比较

来自分类Dev

PHP switch / case语句,不区分大小写的字符串比较

来自分类Dev

比较不区分大小写的字符串,然后计算重复项

来自分类Dev

在Firebird中使用计算的上层索引比较不区分大小写的字符串

来自分类Dev

Go中不区分大小写的字符串比较

来自分类Dev

不区分大小写的字符串数组排序

来自分类Dev

如何使字符串不区分大小写

来自分类Dev

不区分大小写比较字符串

来自分类Dev

比较未知对象类型时,如何确保字符串不区分大小写?

来自分类Dev

Fortran中不区分大小写的字符串比较

来自分类Dev

实体框架核心Cosmos Db-如何比较不区分大小写的字符串?

来自分类Dev

比较不区分大小写的两个字符串

来自分类Dev

如何使字符串替换不区分大小写

来自分类Dev

EF Core postgresql字符串比较(不区分大小写)

来自分类Dev

regEx包装不区分大小写的字符串

来自分类Dev

C#不区分大小写的字符串比较

来自分类Dev

不区分大小写的字符串数组比较

来自分类Dev

如何区分大小写比较字符串?

来自分类Dev

比较不区分大小写的字符串,然后计算重复项

来自分类Dev

Puppet 中区分大小写的字符串比较

来自分类Dev

vuex ORM中的'where'子句是否可以不区分大小写的字符串比较?

Related 相关文章

  1. 1

    字符串不区分大小写的模式匹配

  2. 2

    C ++中不区分大小写的标准字符串比较

  3. 3

    如何比较不区分大小写和不区分重音的字符串

  4. 4

    如何使字符串比较不区分大小写?

  5. 5

    区分大小写的字符串比较

  6. 6

    C ++ 11是否引入了不区分大小写的字符串比较算法?

  7. 7

    不区分大小写的排序集-区分大小写保留相同的字符串

  8. 8

    C#文件路径字符串比较不区分大小写

  9. 9

    不区分大小写的字符串数组比较

  10. 10

    PHP switch / case语句,不区分大小写的字符串比较

  11. 11

    比较不区分大小写的字符串,然后计算重复项

  12. 12

    在Firebird中使用计算的上层索引比较不区分大小写的字符串

  13. 13

    Go中不区分大小写的字符串比较

  14. 14

    不区分大小写的字符串数组排序

  15. 15

    如何使字符串不区分大小写

  16. 16

    不区分大小写比较字符串

  17. 17

    比较未知对象类型时,如何确保字符串不区分大小写?

  18. 18

    Fortran中不区分大小写的字符串比较

  19. 19

    实体框架核心Cosmos Db-如何比较不区分大小写的字符串?

  20. 20

    比较不区分大小写的两个字符串

  21. 21

    如何使字符串替换不区分大小写

  22. 22

    EF Core postgresql字符串比较(不区分大小写)

  23. 23

    regEx包装不区分大小写的字符串

  24. 24

    C#不区分大小写的字符串比较

  25. 25

    不区分大小写的字符串数组比较

  26. 26

    如何区分大小写比较字符串?

  27. 27

    比较不区分大小写的字符串,然后计算重复项

  28. 28

    Puppet 中区分大小写的字符串比较

  29. 29

    vuex ORM中的'where'子句是否可以不区分大小写的字符串比较?

热门标签

归档