我想知道原始对象与指向对象的指针是否有任何性能基准测试。我知道在引用类型(例如地图)上使用指针是没有意义的,所以请不要提及它。我知道如果数据需要更新,你“必须”使用指针,所以请不要提及它。我发现的大多数答案/文档基本上都改写了官方文档中的指南: ... If the receiver is large, a big struct for instance, it will be much cheaper to use a pointer receiver.我的问题只是“大”/“大”是什么意思?字符串上的指针是否矫枉过正?一个有两个字符串的结构呢,一个 struct 3 的字符串字段呢??我认为我们经常处理这个用例,所以这是一个公平的问题。有些人建议不要介意性能问题,但也许有些人希望在有机会时使用正确的符号,即使性能增益并不显着。毕竟一个指针并不那么昂贵(即一次额外的击键)。
3 回答
慕的地8271018
TA贡献1796条经验 获得超4个赞
使用指针没有意义的一个例子是引用类型(切片、映射和通道)
如本主题所述:
引用的概念仅表示用于将您推荐给某物的目的。这并不神奇。
指针是一个简单的引用,它告诉你去哪里找。
切片告诉您从哪里开始寻找以及多远。
地图和频道也只是告诉你去哪里看,但它们引用的数据和它们支持的操作更加复杂。关键是所有实际数据都是间接存储的,您所持有的只是有关如何访问它的信息。
因此,在许多情况下,您不需要添加另一层间接寻址,除非出于某种原因需要双重间接寻址。
正如“指针与参数和返回值中的值”中的twotwotwo细节一样,字符串、接口值和函数值也是用指针实现的。 因此,您很少需要在这些对象上使用指针。
翻阅古今
TA贡献1780条经验 获得超5个赞
由于可能存在不同的性能目标,因此很难为您提供确切的条件。根据经验,默认情况下,所有大于 128 位的对象都应通过指针传递。规则的可能例外情况:
您正在编写延迟敏感的服务器,因此您希望最大限度地减少垃圾收集压力。为了实现您的请求结构具有字节 [8] 字段而不是指向包含字节 [8] 的数据结构的指针。一种分配而不是两种分配。
当您传递结构并制作副本时,您正在编写的算法更具可读性
等等。
- 3 回答
- 0 关注
- 410 浏览
添加回答
举报
0/150
提交
取消