有没有一种符合标准的方法来检测C标准库中的函数是否通过intrinsic/builtin实现?

Is there a standard-compliant way to detect whether a function in the C standard library is implemented via intrinsic/builtin?

是否有符合标准的方法来检测 C 标准库中的函数是否通过 intrinsic/builtin 实现?

我非常有信心我可以实现比标准库 为特定调用站点 提供的函数更好的代码,如果只是因为函数调用开销的话。但是,如果有问题的函数是通过 intrinsic/builtin 实现的,则没有函数调用开销可以克服,因此尝试是愚蠢的。

如果有办法,我觉得它不会很简单,因为它可能因调用站点而异。例如,将恒定长度传递给 memcpy 可能会为编译器提供生成内联代码的绝佳机会,但可变长度可能会提供较少的机会。我想可用的最佳提示可能是三个值之一,“总是”、“从不”或“有时”。这对我来说已经足够了。

关于如何实现这一点的细节可以协商,只要它们符合标准即可。该标准的版本甚至是可以协商的,因为它是可测试的,如果该问题不能为标准的早期版本回答,我很乐意做出最安全的假设。但是当然最好在编译时执行此操作。

(经过编辑以包含具体细节,以便更容易思考,即使这些细节无关紧要)

让我们假设 memcpy 确实是有问题的函数,并且我们知道长度总是可变的,因为它被传递给调用 memcpy 的函数,但我们也知道长度是经常 1.

调用库的开销肯定会支配 if (1==length)*dst = *src;。所以问题是 1 实际上是多少频率,这是一个只有我能回答的问题,以及是否可以消除实现调用库的任何可能性。

这个问题不是关于是否可以编写比 memcpy 或任何其他标准库函数更快的函数。对此有很多问题,这不是其中之一。

Nate Eldredge 的评论似乎是我们最接近简单的“是”或“否”的答案:“C 标准甚至没有 'intrinsic / builtin' 的概念”。