我正在考虑memcpy
,其中传递的 src 指针可能是奇数内存地址。这可能吗?如果可以的话,可以实现吗?
如果对于我的系统,内存可以 32 位(4 字节) block 寻址:
0x00001000
0x00001020
0x00001040
0x00001060
如何从内容从 0x00001000
开始的数组的中间复制五个字节,例如地址 0x00001050
到 0x00001078
的内容(包括在内)?
memcpy
实现是否始终必须逐字节复制?
最佳答案
这在所有 C 版本、所有平台上都可以正常工作 - 如果 memcpy() 的参数需要字对齐,则 C 编译器将不符合 C 标准。
如果你仔细观察,你会发现如果 src 和 dst 是字对齐的,memcpy() 总是更快,并且需要特殊的技巧来应对更一般的情况,例如奇数指针,因为这样它需要下降到字节级别。但这不是您担心的 - 您只需使用该功能并相信它可以工作。
关于c - 如何从比系统可寻址粒度更精细的地址开始复制内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28955607/