所以我今天早些时候浏览了 Quake 引擎的源代码,偶然发现了一些编写的实用函数。其中之一是“Q_memcpy”:
void Q_memcpy (void *dest, void *src, int count)
{
int i;
if (( ( (long)dest | (long)src | count) & 3) == 0 )
{
count>>=2;
for (i=0 ; i<count ; i++)
((int *)dest)[i] = ((int *)src)[i];
}
else
for (i=0 ; i<count ; i++)
((byte *)dest)[i] = ((byte *)src)[i];
}
我了解该函数的整个前提,但我不太了解源地址和目标地址之间按位或的原因。所以我的问题总和如下:
- 为什么 'count' 会在同一个按位算术中使用?
- 如果结果不同,为什么要检查结果的最后两位?
- 整个检查的目的是什么?
我确信这是显而易见的,但请原谅我的无知,因为在编程方面我还没有真正深入研究更底层的事情。我只是觉得它很有趣,并想了解更多。