gpt4 book ai didi

c - 不完全理解 C 中自定义编写的 'memcpy' 函数

转载 作者:行者123 更新时间:2023-12-04 11:14:16 26 4
gpt4 key购买 nike

所以我今天早些时候在浏览 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”?
  • 如果结果的最后两位不同,为什么要检查它们?
  • 这整个支票的用途是什么?

我敢肯定这是显而易见的事情,但请原谅我的无知,因为在编程方面我还没有真正深入到更底层的方面。我只是觉得它很有趣,想了解更多。

最佳答案

它正在查明源指针和目标指针是否是 int 对齐的,以及 count 是否是一个精确的 int 字节大小。

如果这三件事都是真的,那么 l.s.它们中的 2 位都将是 0(假设指针和 int 是 4 个字节)。所以该算法对三个值进行或运算,并隔离 l.s. 2 位。

在这种情况下,它通过int 复制int。否则它会通过 char 复制 char

如果测试失败,更复杂的算法将通过 char 和中间字节 int 复制一些前导和尾随字节 char通过 int

关于c - 不完全理解 C 中自定义编写的 'memcpy' 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50495186/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com