如何从比系统可寻址粒度更细的地址开始复制内存?

How to copy memory starting at address finer than the addressable granularity of your system?

我正在考虑 memcpy,其中传递的 src 指针可能是一个奇数内存地址。这可能吗?并且,如果可以,是否可以实施?

如果对于我的系统,内存可以 32 位(4 字节)块寻址:

0x00001000
0x00001020
0x00001040
0x00001060

如何从内容从 0x00001000 开始的数组中的中间位置复制五个字节,例如地址 0x000010500x00001078 的内容?

memcpy 实现是否总是必须逐字节复制?

这在所有版本的 C 和所有平台上都能正常工作 - 如果 memcpy() 的参数需要字对齐,C 编译器将不符合 C 标准。

如果深入了解,您会发现如果 src 和 dst 是字对齐的,memcpy() 总是更快,并且需要特殊技巧来处理更一般的情况,例如奇数指针,因为它需要下降到字节级别。但这不是您的担心 - 您只需使用该功能并相信它会起作用。