【发布时间】:2018-12-31 20:23:42
【问题描述】:
以下是我在搜索优化的memcpy 实现时得到的代码。
这是link
void *memcpy(void *dst, void const *src, size_t len) {
long *plDst = (long *)dst;
long const *plSrc = (long const *)src;
if (!(src & 0xFFFFFFFC) && !(dst & 0xFFFFFFFC)) {
while (len >= 4) {
*plDst++ = *plSrc++;
len -= 4;
}
}
char *pcDst = (char *)plDst;
char const *pcDst = (char const *)plSrc;
while (len--) {
*pcDst++ = *pcSrc++;
}
return (dst);
}
谁能给我解释一下下面这行吗?
if (!(src & 0xFFFFFFFC) && !(dst & 0xFFFFFFFC))
在这里他们想检查src 和dst 地址是否与4 byte 边界对齐。为什么他们使用!,因为它每次都会使条件false?
其次,以上代码是否还有进一步优化的空间?
【问题讨论】:
-
为什么你认为条件可能每次都是假的?
-
看起来像是文章中的错字 - 应该是:
if (!(src & ~0xFFFFFFFC) && !(dst & ~0xFFFFFFFC))。 -
为了检查对齐你可能想使用
!(src&3) && !(dst&3)sn-p中的条件检查不同的东西 -
这篇文章的第一条评论也注意到了这个错别字
-
感谢您的评论。对齐现在很清楚。我们可以在代码中进行更多优化以使其更快吗?如果我们不检查 4 字节对齐怎么办?
标签: c optimization