为了账号安全,请及时绑定邮箱和手机立即绑定

为什么要使用指针(性能)?

为什么要使用指针(性能)?

Go
阿波罗的战车 2021-09-21 22:13:34
我想知道原始对象与指向对象的指针是否有任何性能基准测试。我知道在引用类型(例如地图)上使用指针是没有意义的,所以请不要提及它。我知道如果数据需要更新,你“必须”使用指针,所以请不要提及它。我发现的大多数答案/文档基本上都改写了官方文档中的指南: ... 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细节一样,字符串、接口值和函数值也是用指针实现的。 因此,您很少需要在这些对象上使用指针。


查看完整回答
反对 回复 2021-09-21
?
莫回无

TA贡献1865条经验 获得超7个赞

引用golang官方文档

...效率的考虑。如果接收器很大,例如一个大的结构,使用指针接收器会便宜得多。


查看完整回答
反对 回复 2021-09-21
?
翻阅古今

TA贡献1780条经验 获得超5个赞

由于可能存在不同的性能目标,因此很难为您提供确切的条件。根据经验,默认情况下,所有大于 128 位的对象都应通过指针传递。规则的可能例外情况:

  • 您正在编写延迟敏感的服务器,因此您希望最大限度地减少垃圾收集压力。为了实现您的请求结构具有字节 [8] 字段而不是指向包含字节 [8] 的数据结构的指针。一种分配而不是两种分配。

    • 当您传递结构并制作副本时,您正在编写的算法更具可读性

等等。


查看完整回答
反对 回复 2021-09-21
  • 3 回答
  • 0 关注
  • 410 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信