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

2023-12-14

我想知道是否有关于原始对象与对象指针的性能基准。

  • 我知道在引用类型(例如地图)上使用指针是没有意义的,所以请不要提及它。
  • 我知道如果数据需要更新,您“必须”使用指针,所以请不要提及它。

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

我的问题只是“大”/“大”是什么意思?字符串上的指针是不是太过分了?带有两个字符串的结构怎么样,带有 3 个字符串字段的结构怎么样?

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


使用指针没有意义的一个例子是引用类型(切片、贴图和通道)

正如中提到的这个线程:

参考的概念只是意味着能够向您推荐某物的目的。这并不神奇。

指针是一个简单的引用,告诉您要查看的位置。
切片告诉您从哪里开始寻找以及多远。
地图和通道也只是告诉您去哪里查看,但是它们引用的数据以及它们支持的操作更加复杂。

关键是所有实际数据都是间接存储的,您所持有的只是有关如何访问它的信息。
因此,在许多情况下,您不需要添加另一层间接,除非您出于某种原因需要双重间接。

As 两两两详细信息在“参数和返回值中的指针与值"、字符串、接口值、函数值也是用指针实现的。
因此,您很少需要在这些对象上使用指针。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么要使用指针(性能)? 的相关文章

  • golang中通道缓冲容量0和1的区别

    我已将通道缓冲区大小设置为零 例如var intChannelZero make chan int 当从intChannelZero将被阻止 直到intChannelZero有价值 另外 我将通道缓冲区大小设置为 1 例如var intCh
  • 如何将所有GET请求查询参数放入Go中的结构体中?

    你好 我想将 get 查询参数转换为 Go 中的结构 例如我有这样的结构 type Filter struct Offset int64 json offset Limit int64 json limit SortBy string js
  • Golang 结构体初始化

    有一个像这样的简单结构 type Event struct Id int Name string 这两种初始化方法有什么区别呢 e1 Event Id 1 Name event 1 e2 Event Id 2 Name event 2 为什
  • 有没有办法间歇性地执行重复性任务?

    有没有办法在 Go 中执行重复的后台任务 我在想类似的事情Timer schedule task delay period 在爪哇 我知道我可以用 goroutine 来做到这一点Time sleep 但我想要一些容易停止的东西 这是我得到
  • 有没有办法从另一个包访问结构体的私有字段?

    我在一个包中有一个具有私有字段的结构 package foo type Foo struct x int y Foo 另一个包 例如 白盒测试包 需要访问它们 package bar import foo func change foo f
  • 为什么 DER ASN.1 大整数的解组在 Golang 中仅限于 SEQUENCE?

    我希望能够使用encoding asn1 包从 DER 文件中解组一个大整数 但它看起来只适用于整数序列 例如 这不起作用 这很奇怪 因为 Big Int 的编组效果很好 https play golang org p Wkj0jAA6bp
  • 如何对结构切片而不是切片结构进行范围调整

    稍微玩了一下 Go HTML 模板后 我发现的所有循环模板中对象的示例都是将切片结构传递给模板 有点像这个示例 type UserList struct Id int Name string var templates template M
  • 云存储 API 的错误导入“系统调用”

    我正在按照以下说明进行操作https cloud google com appengine docs go googlecloudstorageclient download开始将一些代码从现已弃用的文件 API 迁移到新的 Cloud S
  • Golang const unsafe.Sizeof

    不明白为什么我可以做到 const OK uint64 0 const OK int unsafe Sizeof uint64 0 但不是这个 const NOK binary Size uint64 0 它的解释在规格 https gol
  • 从 Golang 调用 C 函数

    我想在 Golang 中编写控制器逻辑并处理 json 和数据库 同时在 C 中使用我的数学处理模型 在我看来 调用 C 函数的开销必须尽可能低 就像设置寄存器 rcx rdx rsi rdi 一样 执行一些操作fastcall 并获取 r
  • 如何递归取消引用指针(C++03)?

    我正在尝试在 C 中递归地取消引用指针 如果传递一个对象 那就是not一个指针 这包括智能指针 我只想返回对象本身 如果可能的话通过引用返回 我有这个代码 template
  • 如何在 Go 中获取给定月份的第一个星期一?

    我正在尝试获取给定月份的第一个星期一 我能想到的最好方法是循环前 7 天 然后返回 Weekday Monday 有一个更好的方法吗 通过查看时间的 Weekday 您可以计算出第一个星期一 package main import fmt
  • 对嵌套结构使用自定义解组时,GoLang 结构无法正确解组

    我们需要对嵌套在多个其他结构中的结构使用自定义解组器 而这些结构不需要自定义解组器 我们有很多类似的结构B下面定义的结构 类似于嵌套A 代码的输出是true false 0 预期的true false 2 有任何想法吗 Go 游乐场示例he
  • 如何检查两个变量是否指向内存中的同一个对象?

    例如 struct Foo lt a gt bar a str fn main let foo instance Foo bar bar let some vector Vec lt Foo gt vec foo instance asse
  • Go 指针 - 通过指针将值附加到切片

    我有一个 struct ProductData 及其实例 p 它有一个切片属性 type ProductInfo struct TopAttributes map string interface 我想设置 TopAttributes 如下
  • 管理多租户 ArangoDB 连接

    我使用 ArangoDB Go 使用 go driver 并且需要实现多租户 这意味着每个客户都将在单独的数据库中拥有他的数据 我想要弄清楚的是如何使这种多租户发挥作用 我知道为每个请求创建一个新的数据库连接是不可持续的 这意味着我必须维护
  • 引用与指针的执行速度

    我最近阅读了一篇关于托管语言是否比本机语言 特别是 C 与 C 慢 或快 的讨论 一位参与讨论的人士表示 托管语言的 JIT 编译器将能够对引用进行优化 而这在使用指针的语言中是不可能实现的 我想知道的是 对于引用而不是指针可以进行 什么样
  • 使用生成的 Golang DLL 返回字符串或 *C.Char

    我一直在努力追随z505 goDLL https github com z505 goDLL回购并遇到了一个大问题 该方法无法返回字符串 我无法读取结果的输出变量 这是我到目前为止使用的代码 Go 完整代码https play golang
  • 重新设计循环依赖缺陷

    我有一堆小服务 它们共享一些常见的包 例如Logger Configuration and Net 我在单独的项目中编写了每个包 问题是我的Logger需求包Configuration用于设置 和我的Configuration not仅由L
  • char指针或char变量的默认值是什么[重复]

    这个问题在这里已经有答案了 下面是我尝试打印 char 变量和指针的默认值 值的代码 但无法在控制台上看到它 它是否有默认值或只是无法读取 ASCII 范围 include

随机推荐

  • MySQL别名简写?

    我需要从两个表中选择所有列 但需要能够在结果中区分它们 是否有一种简写方法可以为结果中的每一列指定一个别名 例如 SELECT t1 AS t1 SOMETHING t2 AS SOMETHING ELSE FROM TABLE1 INNE
  • 阻止仙人掌图上的有向路径[关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 我想找到最长的路径距离仙人掌图具有某些阻塞定向路径 For example if we have following 4 nodes 这意味着 如果我们访问 1 我们就无法访问 2 也
  • 如何在jqGrid表单中添加简单的文本标签?

    当从寻呼机使用 添加 或 编辑 表单时 我想知道如何在表单中添加一个简单的静态标签 而不创建任何对 colNames 和 colModel 产生影响的附加列 例如 我有一个非常简单的典型添加表单 它从包含一些标签和表单元素的寻呼机打开 名称
  • AutoMapper 3.1.1 和 Entity Framework 6.1 代理对象

    我意识到已经有人问过这个问题 但到目前为止我读过的解决方案似乎没有什么作用 我正在使用 Entity Framework 6 1 和 AutoMapper 3 1 1 采取以下对象 Company and CompanyListItem 我
  • 列出所有外键 PostgreSQL

    我需要一个返回的查询 表名 字段名 字段类型 约束名 到目前为止我有 select conrelid regclass AS table name regexp replace pg get constraintdef c oid 1 as
  • Gradle,命令行“cmd”、“/c”、“echo doLast!”什么也没做

    我正在读关于Gradle 执行程序并创建了以下内容build gradle task startTomcat type Exec commandLine cmd c echo init startTomcat task stopTomcat
  • 在 Javascript 中获取时区的 utc 偏移量

    我需要一个 Javascript 函数 给定时区 返回当前 UTC 偏移量 例如 theFuncIneed US Eastern gt 240 如今这已成为可能Intl API 实施Intl是基于icu4c 如果您挖掘源代码 您会发现时区名
  • 通过 spring-rabbitmq 自动重试连接到代理

    我读过这个文档片段 RabbitMQ 自动连接 拓扑恢复 自 Spring AMQP 第一个版本以来 该框架提供了其 在代理发生故障时 可以恢复自己的连接和通道 此外 如第 3 1 10 节 配置代理 中所述 RabbitAdmin 将在以
  • 注释时间序列图

    我有一个日期索引数组 x 日期时间对象 和一个实际值数组 y 债券价格 执行以下操作 plot x y 生成一个完美的时间序列图 其中 x 轴标有日期 到目前为止没有问题 但我想在某些日期添加文本 例如 在2009年10月31日 我希望显示
  • 如何控制ConsumerGroup处理消息的并发度

    我正在使用 kafka node ConsumerGroup 来消费来自主题的消息 ConsumerGroup在消费消息时需要调用外部API 甚至可能需要一秒钟才能响应 我希望控制消费队列中的下一条消息 直到收到 API 的响应 以便按顺序
  • 尝试从 SAML 创建声明时出现错误“WIF10201:未找到有效的键映射”

    我正在尝试验证来自第三方 Siteminder IDP 的 SAML 响应 我已经安装了他们提供的证书 当我打电话给验证令牌方法 System IdentityModel Tokens 创建声明 我收到以下错误 WIF10201 找不到有效
  • Postgres 查询获取所有孩子的 id

    我是一个 SQL 菜鸟 到目前为止只编写了非常基本的查询 我有一张看起来像这样的桌子 item full name varchar 65535 item id bigint item owners varchar 255 item appr
  • git lock 错误背后的原因

    我正在一个拥有数百个分支的大型 git 存储库中工作 我在 Windows 上 通常当我git pull 它给了我多个锁定错误 例如 error cannot lock ref refs remotes origin branchname
  • 如何检测 UITableView beginUpdates/endUpdates 上的动画已结束?

    我正在使用插入 删除表格单元格insertRowsAtIndexPaths deleteRowsAtIndexPaths包装成beginUpdates endUpdates 我也在使用beginUpdates endUpdates调整 ro
  • 文件夹权限 - 部分或全部身份引用无法翻译

    我想在远程服务器上为域用户设置文件夹 ACL 但总是收到以下错误消息 部分或全部身份参考无法翻译 我究竟做错了什么 这是我的代码 string folderPath remoteServer testDirectory string acc
  • 两次时间之差(以分钟为单位)[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我见过一些使用 Joda Time 和其他方法来计算两个日期之间以毫秒为单位的差异的示例 但是如何将这些应用到仅以分钟为单位计算两个时间之间的差异呢 例如 下午 2 45 和上午 1
  • PHP 致命错误:调用未定义的函数?

    因此 当我将网站托管在我的网络主机上时 我的网站出现了问题 我收到这个错误 PHP Fatal error Call to undefined function getSkillIcons 奇怪的是 在本地 Xampp 它工作得很好 这就是
  • Qt:如何获取正在运行的 QProcess 的实时输出

    我必须在 QProcess 运行时获取它的输出 因此我编写了以下代码 CommandExecutor C CommandExecutor C mProcessStatus AI UNKNOWN mOnTdiActiveCallback mT
  • 使用 Embed API 嵌入 Google Analytics 位置地图视图

    下面是 Google 分析网站上的视图屏幕截图 地理位置 gt 位置 gt 主要维度 城市 我想嵌入这个确切的视图 或者使用 google 的 Embed API 尽可能类似地复制它 并将其显示在我自己的网站上 我已经按照这里的教程进行操作
  • 为什么要使用指针(性能)?

    我想知道是否有关于原始对象与对象指针的性能基准 我知道在引用类型 例如地图 上使用指针是没有意义的 所以请不要提及它 我知道如果数据需要更新 您 必须 使用指针 所以请不要提及它 我发现的大多数答案 文档基本上都改写了官方文档中的指南 If