首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >结构赋值还是memcpy?

结构赋值还是memcpy?
EN

Stack Overflow用户
提问于 2011-03-21 21:50:55
回答 4查看 88.8K关注 0票数 45

如果我想将一个结构复制到另一个结构中(在C中),那么以下各项的优点和缺点是什么:

代码语言:javascript
复制
struct1 = struct2;

vs

代码语言:javascript
复制
memcpy(&struct1, &struct2, sizeof(mystruct_t));

它们是等价的吗?在性能或内存使用方面有区别吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-03-22 00:53:42

struct1=struct2;表示法不仅更简洁,而且更短,给编译器留下了更多的优化机会。=的语义是赋值,而memcpy只是复制内存。这在可读性上也有很大的不同,尽管memcpy在本例中也做了同样的事情。

使用=

票数 43
EN

Stack Overflow用户

发布于 2011-03-21 22:25:01

查看这段关于同一主题的对话:http://bytes.com/topic/c/answers/670947-struct-assignment

基本上,对于该线程中的角例,关于struct copy将做什么,有很多不同意见。如果一个结构的所有成员都是简单的值(int、double等),那就很清楚了。对于数组和指针,以及填充字节,都会产生混淆。

对于memcpy发生了什么,一切都应该非常清楚,因为它是每个字节的逐字拷贝。这包括绝对内存指针、相对偏移量等。

票数 4
EN

Stack Overflow用户

发布于 2011-03-21 22:08:38

我不确定性能差异,尽管我猜大多数编译器都会在幕后使用memcpy。

在大多数情况下,我更喜欢赋值,它更容易阅读,也更明确地说明了目的是什么。假设您更改了其中任何一个结构的类型,编译器将指导您进行哪些更改,要么给出编译器错误,要么使用operator= (如果存在)。而第二个会盲目地复制,可能会导致一个细微的bug。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5383318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档