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

我想知道原始对象与指向对象的指针是否有任何性能基准测试。

  • 我知道在引用类型(例如地图)上使用指针是没有意义的,所以请不要提及它。

  • 我知道如果数据需要更新,你“必须”使用指针,所以请不要提及它。

我发现的大多数答案/文档基本上都改写了官方文档中的指南: ... If the receiver is large, a big struct for instance, it will be much cheaper to use a pointer receiver.

我的问题只是“大”/“大”是什么意思?字符串上的指针是否矫枉过正?一个有两个字符串的结构呢,一个 struct 3 的字符串字段呢??

我认为我们经常处理这个用例,所以这是一个公平的问题。有些人建议不要介意性能问题,但也许有些人希望在有机会时使用正确的符号,即使性能增益并不显着。毕竟一个指针并不那么昂贵(即一次额外的击键)。


阿波罗的战车
浏览 418回答 3
3回答

慕的地8271018

使用指针没有意义的一个例子是引用类型(切片、映射和通道)如本主题所述:引用的概念仅表示用于将您推荐给某物的目的。这并不神奇。指针是一个简单的引用,它告诉你去哪里找。切片告诉您从哪里开始寻找以及多远。地图和频道也只是告诉你去哪里看,但它们引用的数据和它们支持的操作更加复杂。关键是所有实际数据都是间接存储的,您所持有的只是有关如何访问它的信息。因此,在许多情况下,您不需要添加另一层间接寻址,除非出于某种原因需要双重间接寻址。正如“指针与参数和返回值中的值”中的twotwotwo细节一样,字符串、接口值和函数值也是用指针实现的。 因此,您很少需要在这些对象上使用指针。

莫回无

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

翻阅古今

由于可能存在不同的性能目标,因此很难为您提供确切的条件。根据经验,默认情况下,所有大于 128 位的对象都应通过指针传递。规则的可能例外情况:您正在编写延迟敏感的服务器,因此您希望最大限度地减少垃圾收集压力。为了实现您的请求结构具有字节 [8] 字段而不是指向包含字节 [8] 的数据结构的指针。一种分配而不是两种分配。当您传递结构并制作副本时,您正在编写的算法更具可读性等等。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go