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

标签 c memcpy

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

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

0x00001000
0x00001020
0x00001040
0x00001060

如何从内容从 0x00001000 开始的数组的中间复制五个字节,例如地址 0x000010500x00001078 的内容(包括在内)?

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

最佳答案

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

如果你仔细观察,你会发现如果 src 和 dst 是字对齐的,memcpy() 总是更快,并且需要特殊的技巧来应对更一般的情况,例如奇数指针,因为这样它需要下降到字节级别。但这不是您担心的 - 您只需使用该功能并相信它可以工作。

关于c - 如何从比系统可寻址粒度更精细的地址开始复制内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28955607/

相关文章:

c++ - memcpy 没有按预期进行

c++ - memcpy 将 ff ff ff 添加到一个字节的开头

c - 多次运行后 memcpy 崩溃

c++ - 什么是工具链和交叉编译器?

c - 如何在不区分大小写的字符串中查找单词?

c - 使用 exec、c 程序从另一个 .c 读取管道

c - 为什么我必须通过引用传递字符串才能更改它指向的位置?

c - 错误: too few arguments to function 'twice'

C memcpy 未按预期运行

c - 将值从静态 char 数组分配给动态分配的 char 数组