例如swprintf vs swprintf_s或wcstombs vs wcstombs_s更快/更慢?我们给它提供了更多的信息,所以我认为它更快,但是如果事情更安全,那么必须进行某种权衡吗?
答案 0 :(得分:3)
_s
后缀,即边界检查函数被指定为与其未检查版本的行为相同,除此之外,它们需要在运行时执行其他检查以保证前提条件是满足。未经检查的版本可以自由地假设已经进行了检查。
通常情况下,做某事需要花费更多时间而不是这样做,因此可以预期,与检查版本相比,可以更有效地实施未经检查的版本。
然而,差异可能(但可能不是)无关紧要或不存在,例如,如果实施已选择在“未检查”版本中执行检查 - 标准不禁止。当然,在将附加信息传递给checked函数的情况下,未检查的函数不一定能够执行检查函数需要执行的所有检查。
P.S。 TR 24731-1文件中引入了边界检查功能。从C11开始,它们是C标准库的可选部分。您已将问题标记为C ++,因此应该知道它们不是任何C ++标准的一部分 - 甚至不是可选的。
答案 1 :(得分:2)
“安全”仅意味着更好地防止缓冲区溢出。所以它必须有一个或多个它维护的计数器。当实现使用相同的代码库来实现安全和非安全功能时,理论上安全版本必须更慢,因为它们维护一个或多个额外的计数器。
然而,与基本功能的复杂性相比,其使用的CPU可忽略不计。换句话说:不要为此烦恼;你甚至无法衡量它。
答案 2 :(得分:0)
该标准对您提及的功能的相对速度没有要求。
_s
后缀版本与普通版本之间存在可衡量的差异没有内在原因,所以答案一如既往,"它取决于实施"。