当前位置: 首页 > 面试题库 >

指针和struct中的值有什么区别?

阎咏思
2023-03-14
问题内容

给定以下结构:

type Exp struct {
  foo int,
  bar *int
}

在结构中使用指针或值时,性能方面有何不同?是否有开销,或者这仅仅是两门Go编程课程?

我将使用指针来实现链接的结构,但这是我们唯一必须在结构中使用指针以获得性能的情况吗?

PS:在上面的结构中,我们讨论了一个简单的int,但是它可以是任何其他类型(甚至是自定义类型)


问题答案:

使用对您的程序功能最有用的表格。基本上,这意味着如果将值设为有用nil,则使用指针。

从性能的角度来看,原始数字类型始终比复制取消引用指针更有效。如果复杂的数据结构小于一个或两个高速缓存行(通常小于128字节,这对于x86
CPU来说是一个很好的经验法则),通常仍会更快地进行复制。

当事情变得更大时,如果您担心性能,则需要进行基准测试。CPU 在复制数据方面 非常
高效,涉及的变量太多,它们将决定数据的位置和缓存友好性,这实际上取决于程序的行为以及所使用的硬件。

如果您想更好地了解内存和软件之间的交互方式,那么这是一系列精彩的文章:“每个程序员都应该了解内存”。

简而言之,我告诉人们根据程序的逻辑来选择或不选择指针,然后再担心性能。

  • 如果需要传递要修改的内容,请使用指针。
  • 如果需要确定是否未设置/未设置任何内容,请使用指针。
  • 如果使用的类型具有带有指针接收器的方法,请使用指针。


 类似资料:
  • 本文向大家介绍堆和栈上的指针有什么区别?相关面试题,主要包含被问及堆和栈上的指针有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 指针所指向的这块内存是在哪里分配的,在堆上称为堆上的指针,在栈上为栈上的指针. 在堆上的指针,可以保存在全局数据结构中,供不同函数使用访问同一块内存. 在栈上的指针,在函数退出后,该内存即不可访问.

  • 问题内容: 我正在尝试将指针缠绕在go中。我这里有这段代码 和输出是 我想了解为什么我的InsertList方法根本没有引用节点指针指向其他结构 问题答案: 接收方通过值传递,就像其他参数一样,因此调用者看不到您在函数中所做的任何更改。如果要让函数修改函数外部存在的内容,则该函数需要处理指向该对象的指针。在您的情况下,是一个指针,但是您真正想要的是一个指向表示列表本身的对象的指针。例如:

  • 问题内容: 我的Java书解释说,要使用对象,我们可以将它们分配给引用变量。这与指向对象的指针有何不同?Java有指针吗? 谢谢 :) 问题答案: 引用有点像指针,您不能对其进行算术……尽管它更不透明。尽管基础位 可能 是虚拟内存中的地址,但不一定必须如此。它们只是获取对象(或表示null值)的一种方式。因此,尽管它们并不完全相同,但如果您习惯于将指针视为“一种识别对象或导航至该对象的方式”(在某

  • 本文向大家介绍iOS引用与指针有什么区别?相关面试题,主要包含被问及iOS引用与指针有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 引用必须被初始化,指针不必。 引用初始化以后不能被改变,指针可以改变所指的对象。 不存在指向空值的引用,但是存在指向空值的指针。

  • 本文向大家介绍什么是指向指针的指针? 相关面试题,主要包含被问及什么是指向指针的指针? 时的应答技巧和注意事项,需要的朋友参考一下 指针指向的变量是一个指针,即具体内容为一个指针的值,是一个地址. 此时指针指向的变量长度也是4位.

  • 本文向大家介绍iOS 类(class)和结构体(struct)有什么区别?相关面试题,主要包含被问及iOS 类(class)和结构体(struct)有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 先了解一下什么叫类? 类(Class)是面向对象程序设计实现信息封装的基础。类是一种用户定义类型,也称类类型。每个类包含数据说明和一组操作数据或传递消息的函数。类的实例称为对象。类是面向对象程序设