gpt4 book ai didi

c - memchr() 是如何工作的?

转载 作者:太空狗 更新时间:2023-10-29 16:42:53 25 4
gpt4 key购买 nike

背景:我正在尝试创建一个纯 D 语言实现的功能,大致相当于 C's memchr但使用数组和索引而不是指针。原因是 std.string 将与编译时函数评估一起使用。对于那些不熟悉 w/D 的人,如果满足某些限制,可以在编译时评估函数。一个限制是他们不能使用指针。另一个是它们不能调用 C 函数或使用内联汇编语言。让字符串库在编译时工作对于某些编译时代码生成 hack 很有用。

问题:memchr 如何在引擎盖下工作才能像它一样快地运行?在 Win32 上,我能够使用简单循环在纯 D 中创建的任何内容都至少慢 2 倍,即使使用明显的优化技术(例如禁用边界检查、循环展开等)也是如此。哪些非显而易见的技巧可用于就像在字符串中查找字符一样简单?

最佳答案

我建议看一下 GNU libc的来源。对于大多数函数,它将包含该函数的通用优化 C 版本,以及针对尽可能多的支持架构优化的汇编语言版本,利用机器特定的技巧。

x86-64 SSE2 version结合了 pcmpeqb 的结果一次在整个数据缓存行上(四个 16B vector ),以分摊提前退出的开销 pmovmskb/test/jcc.

gcc 和 clang 目前无法使用 if() break 提前退出条件自动向量化循环,因此它们从明显的 C 实现中生成简单的一次一个字节的 asm。

关于c - memchr() 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/525123/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com