【发布时间】:2021-09-26 19:59:46
【问题描述】:
我正在尝试实现我自己的 memmove 函数。我正在尝试优化它而不是逐字节复制。这是我的实现:
void* my_memmove(void *dest, const void *src, size_t len) {
if((uintptr_t)dest < (uintptr_t)src)
return memcpy(dest,src,len);
long *pdest = (long*)dest +len;
const long *psrc = (const long*)src+len;
if(!((uintptr_t)dest+len & (sizeof(long)-1)) &&
!((uintptr_t)src+len & (sizeof(long)-1))) {
while(len >= sizeof(long)) {
*--pdest = *--psrc;
len-=sizeof(long);
}
}
char *pdest2 = (char*)pdest;
const char *psrc2= (const char*)psrc;
while(len) {
*--pdest2 = *--psrc2;
len--;
}
return dest;
}
关于如何改进或现有代码是否存在问题的任何意见?
【问题讨论】:
-
几率是
memmove已经这样做并处理对齐等。如果您正在寻找您想要的工作代码的评论codereview.stackexchange.com -
您需要确保长指针具有正确对齐的地址,即。 e.如果需要分别复制与此类地址不匹配的第一个和最后几个字节,仍然逐字节复制。
-
@RetiredNinja 谢谢!这正是我正在寻找的,将其移至其他论坛。
-
@Aconcagua 谢谢你的回复。为了处理这种情况,我必须先将未对齐的字节复制到字节,然后默认为字复制?
-
我投票结束这个问题,因为代码审查请求属于代码审查。但请务必阅读their guidelines。