内存消耗的值通过参数Vs.引用

时间:2012-12-18 14:34:00

标签: c++ pass-by-reference memory-consumption

  

可能重复:
  What’s the difference between passing by reference vs. passing by value?

我知道标题可以代表许多其他已回答的问题,我相信我的非常具体的问题在其他主题中没有得到解答(我已经搜索过,抱歉,如果它是重复的话)。

开展业务:考虑下一个签名:

A:

void MyFunction(long int x);

B:

void MyFunction(long int & x);

以及下一个用法:

void main()
{
  short int y = 0;
  MyFunction(y);
  ...
}

我的问题与MyFunction的内存堆栈帧中参数的内存消耗有关。

  1. 在案例A中,参数按值传递,是否意味着它将消耗sizeof(short int)字节?

  2. 在情况B中,参数是通过引用传递的,假设编译器将使用指针实现它,是否意味着它将消耗sizeof( pointer_type )字节 - 这可能是短期int? (我曾经被告知,使用引用时它可能会消耗64位,具体取决于平台)

  3. 请注意,该函数接收long int类型,因为我想知道它是否在两种情况下都有效。

    另一个小问题 - 任何人都可以发布一个例子,其中编译器不会使用指针实现by-reference传递参数吗?

    谢谢, 阿萨夫。

1 个答案:

答案 0 :(得分:2)

答案必然取决于编译器,架构,ABI等。

在下文中,我假设有问题的参数实际上是在堆栈上传递而不是在寄存器中传递(很大的假设!),并且没有积极的优化。

  

在情况A中,参数按值传递,是否意味着它将消耗sizeof(short int)字节?

不,它会消耗sizeof(long int)个字节,因为它会先扩展到匹配MyFunction()的签名。

  

在B的情况下,参数通过引用传递,假设编译器将使用指针实现它,是否意味着它将消耗sizeof(pointer_type)bytes

总之,是的。您无法通过short&预期long&的位置,所以我认为您的意思是在这里传递long&