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

时间:2018-07-25 12:59:49

标签: c struct memcpy

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

但是memcpy()是一个缓冲区,该缓冲区用于构造具有属性打包的 而不会使该规则无效,这是一个很好的决定,而不是解析缓冲区的内容吗?请记住,两者始终具有固定大小

1 个答案:

答案 0 :(得分:0)

如果您确保打包的结构在希望支持的所有目标平台上按需要布置字节,则可以通过<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>Hello</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <script src="prototype.js"></script> <script type="text/javascript"> new Ajax.PeriodicalUpdater('message_field', "time.php", { method: "GET", frequency: 1, //asynchronous: false, onSuccess: function(s){ document.getElementById("t").innerText = s.responseText; }, onFailure: function(xhrResponse){ alert("Failed to update!"+xhrResponse.statusText); } }); </script> </head> <body> <h1 id="t"></h1> </body> </html> 将字节复制到结构中,然后通过结构成员进行访问

根据情况,建议将结构成员复制到常规(未打包)结构中以进一步使用,以使不会重复访问打包结构中未对齐的成员,这可能会导致效率低下。最终,这可能等效于发出多个<?php sleep(5); echo date('h:i:s A'); ?> 调用以将字节从缓冲区复制到普通结构的各个成员中。

使用memcpy肯定至少与解析缓冲区一样有效,因为memcpy是人们可以对数据执行的最简单的操作。但是,究竟是更有效还是相同,取决​​于您将执行哪种类型的解析。一旦将数据存储在结构中,无论如何,无论如何应用程序仍然需要对它进行操作,因此memcpy似乎并不会消除任何必须完成的实际工作。