gpt4 book ai didi

c - 为什么在嵌入式系统代码中通过 memcpy 复制结构?

转载 作者:太空狗 更新时间:2023-10-29 16:42:37 25 4
gpt4 key购买 nike

在嵌入式软件领域复制相同类型的结构时,人们不使用直接赋值,而是通过memcpy() 函数或每个元素复制来完成。

举个例子

struct tag
{

int a;

int b;
};

struct tag exmple1 = {10,20};

struct tag exmple2;

用于将 exmple1 复制到 exmple2..而不是直接写

exmple2=exmple1;

人们使用

memcpy(exmple2,exmple1,sizeof(struct tag));

exmple2.a=exmple1.a; 
exmple2.b=exmple1.b;

为什么????

最佳答案

不管怎样,嵌入式系统并没有什么特别的地方会导致这种危险,所有平台的语言语义都是相同的。

C 在嵌入式系统中使用多年,早期的 C 编译器,在 ANSI/ISO 标准化之前不支持直接结构赋值。许多从业者要么来自那个时代,要么受过那些曾经或正在使用这些从业者编写的遗留代码的人的教导。这可能是疑问的根源,但在符合 ISO 标准的实现上这不是问题。在某些资源非常受限的目标上,由于多种原因,可用的编译器可能不完全符合 ISO,但我怀疑此功能是否会受到影响。

一个问题(同样适用于嵌入式和非嵌入式)是,在分配结构时,实现不需要复制任何未定义填充位的值,因此如果您执行结构分配,然后执行 memcmp() 而不是逐个成员比较来测试是否相等,不能保证它们相等。但是,如果您执行 memcpy(),将复制任何填充位,以便 memcmp() 和逐个成员的比较将产生相等性。

因此可以说在所有情况下(不仅仅是嵌入式)使用 memcpy() 更安全,但改进是微不足道的,不利于可读性。如果不使用最简单的结构赋值方法,即简单的 memcpy(),那将是一个奇怪的实现,因此不太可能发生理论上的不匹配。

关于c - 为什么在嵌入式系统代码中通过 memcpy 复制结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6842363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com