c - C 中的安全函数是否比不安全的函数更快,反之亦然?

标签 c string function security c++11

例如 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/

相关文章:

matlab - 在 Matlab 中使用函数句柄

c++ - 函数没有返回所需的字符串

c - 如何访问从 LED 文件加载的 IUP 对话框中的 GUI 元素?

c - 为什么有些 C 标准头文件以 'std' 开头,而有些则不是?

c++ - std::string 的指针数组

string - 为 HashMap<_, String> 返回默认 &str

javascript - 为什么这些类实现不具有相同的行为?

c++ - 地理坐标插值c++

c - C 中的 typedef 行为

python - 在 Pandas 系列中拆分字符串和整数 - Python