首页 文章

C memcpy字节缓冲区到打包结构,好的决定?

提问于
浏览
0

我知道类型转换为struct的缓冲区违反了严格的别名规则,并且它不可移植

然而,memcpy()是一个缓冲区,结构 with attribute packed 没有排除该规则,这是一个很好的决定,而不是解析缓冲区的内容?让我们记住,两者总是有固定的大小

1 回答

  • 0

    如果您已确保打包结构在您希望支持的所有目标平台上根据需要布置字节,则通过 memcpy 将字节复制到结构中,然后通过结构成员访问它们就可以了 .

    根据具体情况,可能建议将结构成员复制到普通(未打包)结构以供进一步使用,以便不重复访问打包结构中的未对齐成员,这可能效率低下 . 最终,这可能等同于发出多个 memcpy 调用以将缓冲区中的字节复制到正常结构的各个成员中 .

    使用 memcpy 肯定至少与解析缓冲区一样有效,因为 memcpy 是关于数据最简单的事情 . 但是它是更有效还是相同取决于你将要做什么样的解析 . 一旦你有了一个结构中的数据,你仍然必须以你的应用程序需要的任何方式对它进行操作,所以 memcpy 似乎不会消除任何必须完成的实际工作 .

相关问题