开发者社区> 问答> 正文

Linux重定向消息:__strlen_avx2,__mempcpy_avx_unaligned_e

我对收到的三个重定向消息有疑问。只是为了给我的程序一些背景...

我正在使用C编程和Linux。我从包含字典中所有单词的文件中读取数字。我从文件中提取单词,然后将它们保存在一个字符串对象中,该对象由3件事组成:为单词动态分配的字符数组(字符串对象经过设计,因此在数组末尾不需要空终止符) ,一个用于当前存储的单词大小的整数以及一个用于当前动态分配的字符数组容量的整数。每个字符串对象本身都存储在一个向量中,我有30个向量的数组,每个向量的索引对应于单词的大小。例如,我的向量数组中的索引2有94个单词,这意味着索引2处的向量包含94个字符串对象,每个对象持有一个大小为2的单词。将它们存储在向量中之后,

直到现在(我是一个相当新的CS学生,所以请耐心等待),我始终使用valgrind和--leak-check = full来运行我的代码。如您所见,我没有内存泄漏或错误。但是,我意识到也可以使用“ -v”运行程序,执行此操作时,我得到了以下三个重定向消息:

libc.so.6:__strlen_avx2
libc.so.6:__mempcpy_avx_unaligned_erms
libc.so.6:__strchrnul_avx2

我不知道这些是什么意思。我试图通过在网上查找来自己解决这个问题,但我无法弄清楚,所以我想知道这些错误是什么意思。我要说的最后一件事是,第一个重定向消息涉及“ strlen”,这是C的string.h库中的字符串库函数。但是,我从不使用string.h。对于我来说,这个项目的重点是创建自己的自定义字符串对象和我自己的字符串函数库,以使用这些字符串对象。因此,假设重定向消息引用了string.h库函数,我不知道为什么要这样做。

我没有发布任何代码,因为这是一个漫长的项目。我只是在寻找有关这些消息可能指的一般答案。

展开
收起
祖安文状元 2020-01-16 17:40:29 1910 0
1 条回答
写回答
取消 提交回答
  • Valgrind的将检查使用的库函数太-例如strlen,memcpy,strchrnul。

    在启用或不启用某些优化的情况下进行编译时,这些函数调用可能会被替换为优化版本,即此处针对AVX和AVX2优化的版本。但是这些函数正在执行一些肮脏的技巧,否则这些技巧在C语言中是非法的,并且也很难valgrind检查。因此valgrind将呼叫__strlen_avx2重新定向回strlen,以便valgrind可以更轻松地跟踪具体信息。现在,-v仅意味着--verbose并且它显示了更多信息...对于某些人而言,很重要的一点是,要知道__strlen_avx2根本不调用实际函数,这与不使用with运行时不同valgrind,但是对该函数的任何调用都将跳转到strlen受控对象valgrind代替。

    2020-01-16 17:40:34
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Alibaba Cloud Linux 3 发布 立即下载
ECS系统指南之Linux系统诊断 立即下载
ECS运维指南 之 Linux系统诊断 立即下载