背景: 我正在尝试创建一个纯 D 语言实现的功能,它大致相当于C 的 memchr,但使用数组和索引而不是指针。原因是 std.string 将与编译时函数评估一起使用。对于那些不熟悉 w/D 的人,如果满足某些限制,可以在编译时评估函数。一个限制是它们不能使用指针。另一个是他们不能调用 C 函数或使用内联汇编语言。在编译时让字符串库工作对于一些编译时代码生成黑客很有用。
问题: memchr 是如何在幕后工作的,以实现如此快速的性能?在 Win32 上,我能够使用简单循环在纯 D 中创建的任何内容都至少慢 2 倍,即使使用明显的优化技术,例如禁用边界检查、循环展开等。有哪些不明显的技巧可用于像在字符串中查找字符一样简单?