ios - iOS 中的某些 C 函数复制为 #define

标签 ios objective-c c c-preprocessor memcpy

C 函数(如 memcpy 和 memset)可用作 C 函数以及 iOS 中的#define:

例如#define memcpy,在引擎盖下,是:

#define memcpy(dest, src, len)                  \
((__darwin_obsz0 (dest) != (size_t) -1)             \
 ? __builtin___memcpy_chk (dest, src, len, __darwin_obsz0 (dest))   \
 : __inline_memcpy_chk (dest, src, len))
  1. 我发现这里有一些内存检查,但有人可以透露一些额外的细节,说明为什么它比单独的 memcpy 更好(增值在哪里)?

  2. 更重要的是,什么时候使用哪个?

最佳答案

编译器使用这些名称,例如 __inline_memcpy_chk 来帮助优化 memcpy 的使用。它们是对应于编译器内置特性的特殊名称。它们协助它将 memcpy 的某些用途转换为比调用 memcpy 库例程更快的代码。结果可能是简单的移动指令,或者更有效的是,编译器内部信息的简单更改,以便它知道寄存器中有一个值的副本。

如果您取消定义宏 memcpy 以便不使用这些内置功能,这是 C 标准所允许的,memcpy 例程仍然可以工作,但是它的效率可能会低于您单独放置它的效率。

通常,您不应尝试自己调用这些内部名称。它们的设计和定义旨在使 memcpy 的正常使用变得高效。

关于ios - iOS 中的某些 C 函数复制为 #define,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16630467/

相关文章:

ios - actionSheet :didDismissWithButtonIndex: is deprecated in iOS 8. 3. 我现在必须使用的新方法是什么?

C:为什么 size_t 不是 C 关键字?

数一下总数文件中的关键字

c - C中的 "Real Types"和 "Arithmetic Types"有什么区别?

android - flutter DraggableScrollableSheet 与粘性标题

ios - EXC_BAD_INSTRUCTION 运行时错误

iPhone SDK - UIButton突出显示状态问题

ios - 保存用户记录时出错 : "attempt to add owning ref to user rec"

ios - 如何设置 iOS 应用程序使用 USB 音频输入和输出到内部扬声器

objective-c - iOS:使用分段控件更改 subview