今天突然心血来潮想起我前一家公司面试时遇到的一个面试题,就是实现个memcopy()函数。当初太紧张(刚毕业第二次面试),所以写的不是很好(可以说漏洞百出);现在刚学了点汇编,刚好就用两种语言实现下;
首先来看汇编实现的memcpy函数,是利用宏函数来实现的,用汇编指令rep和movsb配合循环把数据以字节为单位从ds:esi传送到es:edi中,把循环次数放在ecx中。当然这样拷贝的才是真正的内存拷贝,其他的函数都稍微有点牵强。
#define myMemcpy(dest, src, n) ({\
void* _ret = dest;\
__asm__("cld;rep;movsb"\
::"D"((long)(_ret)), "S"((long)(src)), "c"((long)(n)));\
_ret;})
在调试汇编实现的memcpy函数时,遇到个错误,这里记录下来:
错误:myMemcpy.c: In function