在经历了9年的C++开发之后,我正在探索Go。在C++中,除了内置类型的变量外,按值传递函数的参数是一种不好的做法,因为会造成性能损失:参数的所有字段都将被复制,并且在大多数情况下,这将是一个非常昂贵的操作。
Go也是这样吗?仅通过值传递"this“以将"const”语义赋值给方法看起来代价很高。Go编译器是否足够聪明,可以防止变量在第一次修改之前被复制?为什么在Go中按值传递"this“不像在C/C++中那样是一种反模式?
发布于 2013-03-11 23:54:46
这取决于接收器的大小。如果接收器少于几十个字节,复制它实际上可能比传递指针所需的指针追逐(额外的内存访问)更便宜。此外,使用指针使结构更有可能被分配到堆上,这给垃圾收集器带来了额外的负担。
在Go中,拷贝总是一个字节一个字节的拷贝,因此成本只取决于结构的大小。在C++中,它可能会调用复制构造函数,这可能会花费很多时间。
因此,除了非常大的对象,根据方法的语义和与API的其余部分的一致性,只需使用任何类型的接收器就可以了。
https://stackoverflow.com/questions/15326185
复制相似问题