访问全局数组比传递参数更有效吗?

时间:2014-06-05 16:18:00

标签: c++ arrays performance optimization stack

我有一个多次调用的函数,我需要将4或5个元素的数组传递给3或4个嵌套函数。

当然,将此数组数据结构创建为全局变量会更高效,其中所有函数都可以使用一个地址引用访问它,而不是将它作为参数传递给嵌套函数。后者需要堆栈推送和弹出,而全局变量不会?

(我知道我可以介绍一下,但我想了解理论会提出什么建议 - 代码将被执行的区别)

2 个答案:

答案 0 :(得分:1)

首先,C / C ++中的数组只是内存中保留的连续区域,带有指向第一个元素的指针,即:Arr [0]

2传递数组作为参数很可能在参数传递中使用寄存器(根据使用的调用约定和函数参数的计数) 使用全局变量时不会使用此寄存器

3 - 编译器传递参数,如

a) Foo(int* Arr)
b) Foo(int Arr[])

是相同的,根据使用的调用约定将指针复制到寄存器或堆栈

(b)中的格式可能只是提示编译器在处理数组时没有重叠以进行更好的优化

答案 1 :(得分:0)

您可以使用指针或引用,而不是传递整个数组。 如果它是C加上,则使该数组成员变量。