例如 swprintf vs swprintf_s 或 wcstombs vs wcstombs_s 更快/更慢?我们为它提供了更多信息,所以我相信它会更快,但再一次,如果某些东西更安全,就必须进行某种权衡吗?
最佳答案
_s
后缀,即边界检查函数被指定以与其非检查版本相同的方式运行,除了此外,它们需要在运行时执行额外检查以保证先决条件得到满足。相反,未经检查的版本可以自由假设已经进行了检查。
通常,做某事比不做要花更多的时间,因此人们期望可以比已检查版本更有效地实现未检查版本。
但是,差异可能(但可能不会)微不足道或不存在,例如,如果实现选择也在“未检查”版本中执行检查 - 这不是标准所禁止的。当然,在将附加信息传递给已检查函数的情况下,非已检查函数不一定会执行已检查函数需要执行的所有检查。
附言TR 24731-1 文档中介绍了边界检查功能。自 C11 以来,它们是 C 标准库的可选部分。您也将问题标记为 C++,因此可能需要知道它们不是任何 C++ 标准的一部分——甚至不是可选的。
关于c - C 中的安全函数是否比不安全的函数更快,反之亦然?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41017227/