C中的安全功能是否比不安全功能更快,反之亦然?

时间:2016-12-07 12:14:41

标签: c string function security c++11

例如swprintf vs swprintf_s或wcstombs vs wcstombs_s更快/更慢?我们给它提供了更多的信息,所以我认为它更快,但是如果事情更安全,那么必须进行某种权衡吗?

3 个答案:

答案 0 :(得分:3)

_s后缀,即边界检查函数被指定为与其未检查版本的行为相同,除此之外,它们需要在运行时执行其他检查以保证前提条件是满足。未经检查的版本可以自由地假设已经进行了检查。

通常情况下,做某事需要花费更多时间而不是这样做,因此可以预期,与检查版本相比,可以更有效地实施未经检查的版本。

然而,差异可能(但可能不是)无关紧要或不存在,例如,如果实施已选择在“未检查”版本中执行检查 - 标准不禁止。当然,在将附加信息传递给checked函数的情况下,未检查的函数不一定能够执行检查函数需要执行的所有检查。

P.S。 TR 24731-1文件中引入了边界检查功能。从C11开始,它们是C标准库的可选部分。您已将问题标记为C ++,因此应该知道它们不是任何C ++标准的一部分 - 甚至不是可选的。

答案 1 :(得分:2)

“安全”仅意味着更好地防止缓冲区溢出。所以它必须有一个或多个它维护的计数器。当实现使用相同的代码库来实现安全和非安全功能时,理论上安全版本必须更慢,因为它们维护一个或多个额外的计数器。

然而,与基本功能的复杂性相比,其使用的CPU可忽略不计。换句话说:不要为此烦恼;你甚至无法衡量它。

答案 2 :(得分:0)

该标准对您提及的功能的相对速度没有要求。

_s后缀版本与普通版本之间存在可衡量的差异没有内在原因,所以答案一如既往,"它取决于实施"。