When can I get better performance using memcpy or how do I benefit from using it?
For example: 
float a[3]; float b[3];
is cod
You can use memcpy only if the objects you're copying have no explicit constructors, so as their members (so-called POD, "Plain Old Data"). So it is OK to call memcpy for float, but it is wrong for, e.g., std::string.
But part of the work has already been done for you: std::copy from  is specialized for built-in types (and possibly for every other POD-type - depends on STL implementation). So writing std::copy(a, a + 3, b) is as fast (after compiler optimization) as memcpy, but is less error-prone.