重寫memcpy()函數需要注意哪些問題
標准memcpy()的解釋:
void *memcpy(void *dst, const void *src, size_t n);
//If copying takes place between objects that overlap, the behavior is undefined.
注意下面的注釋,對於地址重疊的情況,該函數的行為是未定義的。
事實上所說的陷阱也在於此,自己動手實現memcpy()時就需要考慮地址重疊的情況。
另外,標准庫也提供了地址重疊時的內存拷貝函數:memmove(),那么為什么還要考慮重寫memcpy()函數呢?
因為memmove()函數的實現效率問題,該函數把源字符串拷貝到臨時buf里,然后再從臨時buf里寫到目的地址,增加了一次不必要的開銷。