首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Go方法中通过值传递"this“是否会有性能损失?

在Go方法中通过值传递"this“是否会有性能损失?
EN

Stack Overflow用户
提问于 2013-03-11 02:56:02
回答 4查看 1.4K关注 0票数 5

在经历了9年的C++开发之后,我正在探索Go。在C++中,除了内置类型的变量外,按值传递函数的参数是一种不好的做法,因为会造成性能损失:参数的所有字段都将被复制,并且在大多数情况下,这将是一个非常昂贵的操作。

Go也是这样吗?仅通过值传递"this“以将"const”语义赋值给方法看起来代价很高。Go编译器是否足够聪明,可以防止变量在第一次修改之前被复制?为什么在Go中按值传递"this“不像在C/C++中那样是一种反模式?

EN

Stack Overflow用户

发布于 2013-03-11 23:54:46

这取决于接收器的大小。如果接收器少于几十个字节,复制它实际上可能比传递指针所需的指针追逐(额外的内存访问)更便宜。此外,使用指针使结构更有可能被分配到堆上,这给垃圾收集器带来了额外的负担。

在Go中,拷贝总是一个字节一个字节的拷贝,因此成本只取决于结构的大小。在C++中,它可能会调用复制构造函数,这可能会花费很多时间。

因此,除了非常大的对象,根据方法的语义和与API的其余部分的一致性,只需使用任何类型的接收器就可以了。

票数 5
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15326185

复制
相关文章

相似问题

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