我听说memcpy是复制数据的非常有效的算法。为了给我的代码吸取一些教训,我决定研究它在GNU中的实现。但是,对于大的内存块,它会进行一些检查,然后calls a PAGE_COPY_FWD macro——我在任何地方都找不到defined。
mem-cpy源代码的最后一个链接是:

System-specific pagecopy.h files should define these macros and then
  #include this file:

  ...

  PAGE_COPY_FWD (dstp, srcp, nbytes_left, nbytes)

两个问题:
1)如何找到该宏的实现?(在任何地方——无论是在我的机器上,还是在其他人的机器上——即使这意味着我必须阅读程序集代码。)
2)要直接调用该宏,即不首先通过memcpy,必须包括哪些内容?

最佳答案

我找到了PAGE_COPY_FWD的定义

#define PAGE_COPY_FWD(dstp, srcp, nbytes_left, nbytes)  \
     ((nbytes_left) = ((nbytes) - \
      (__vm_copy (__mach_task_self (),  \
       (vm_address_t) srcp, trunc_page (nbytes), \
        (vm_address_t) dstp) == KERN_SUCCESS    \
                 ? trunc_page (nbytes) \
                 : 0)))

在这里找到的https://www.sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/mach/pagecopy.h

09-25 15:55