了解C中的页面复制

时间:2017-07-11 20:33:43

标签: c performance gnu glibc memcpy

我听说scenario 'user signs up' do Users::RegistrationsController.any_instance.stub(:check_captcha).and_return(true) # Begin signup visit new_user_registration_path 是一种非常有效的复制数据算法。为了尝试为我的代码学习一些课程,我决定研究它在GNU中的实现。但是,对于大内存块,它会进行一些检查,然后calls a PAGE_COPY_FWD macro - 我无法在任何地方找到它。

mem_cpy源代码的最后一个链接说:

memcpy

两个问题:

1)如何找到这个宏的实现? (任何地方 - 无论是在我的机器上,还是在别人的机器上 - 即使这意味着我必须阅读汇编代码。)

2)我必须包含什么才能直接调用此宏,即不先通过memcpy?

1 个答案:

答案 0 :(得分:0)

我找到了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

找到它