指针间接与在堆栈上分配的成本是多少?

Posted

技术标签:

【中文标题】指针间接与在堆栈上分配的成本是多少?【英文标题】:What is the cost of pointer indirection versus allocating on the stack? 【发布时间】:2012-10-17 08:37:00 【问题描述】:

我有一个将被重复调用的绘制方法(每一帧......)。在这个方法中,我有一些本地定义的变量(大约 20 个)。我正在考虑将它们放在一个结构中,并将指向该结构的指针作为参数传递给该方法。这是希望间接操作比将变量放在堆栈上更快。

一般来说,这里是否存在合理的性能差异?

【问题讨论】:

现在拼凑起来,虽然这是一个漫长的过程,所以我想我会去教育自己。 ;) 【参考方案1】:

将变量放入堆栈(至少在 x86 处理器上)非常快。在 x86 处理器上,使用堆栈相当于在函数开头减一次,在结尾加一次;添加更多变量只会更改数字并且不会使其变慢。如果您使用的是间接寻址,则可能需要更多操作,因此速度可能会慢一些,但如果您的编译器将该结构指针放在寄存器中,则加载和存储速度可能一样快。

我会坚持使用任何使您的代码更简单的方法,因为无论如何它都是一种微优化,您应该在分析并确定它是一个瓶颈之后才考虑它。

【讨论】:

是的 - 我唯一会这样做的情况是,如果期望结构在调用之间保持某种状态。

以上是关于指针间接与在堆栈上分配的成本是多少?的主要内容,如果未能解决你的问题,请参考以下文章

c语言 啥是间接引用(indirection)?

C 语言指针间接赋值 ( 直接修改 和 间接修改 指针变量 的值 | 在函数中 间接修改 指针变量 的值 | 在函数中 间接修改 外部变量 的原理 )

读取间接状态与在java中读取变量的直接状态

在递归函数中在堆上分配与在堆栈上分配

指针(初学者)

C 语言指针间接赋值 ( 间接赋值三要素 | 间接赋值 使用的三种场景 )