Question: Can I use C to know whether a file operation is performed (and where it is performed) on the disk at run time?

Answer: 
Assuming a sane library implementor, `memcpy` will always be at least as fast as `memmove`. However, on most platforms the difference will be minimal, and on many platforms `memcpy` is just an alias for `memmove` to support legacy code that (incorrectly) calls `memcpy` on overlapping buffers.

Both `memcpy` and `memmove` should be written to take advantage of the fastest loads and stores available on the platform.

To answer your question: you should use the one that is semantically correct. If you can guarantee that the buffers do not overlap, you should use `memcpy`. If you cannot guarantee that the buffers don't overlap, you should use `memmove`.
`memcpy()` doesn't have any special handling for overlapping buffers so it lacks some checks therefore it is faster than `memmove()`.

Also on some architectures `memcpy()` can benefit from using CPU instructions for moving blocks of memory - something that `memmove()` cannot use.