值通过参数VS. 通过

可能重复:
传递引用与价值传递之间有什么区别?

我知道标题可以代表很多其他回答的问题,我相信我的非常具体的问题没有在其他线索中回答过(我已经搜索过,对不起,如果它是重复的)。

对于企业来说:考虑下一个签名:

A:

void MyFunction(long int x);

B:

void MyFunction(long int & x);

和下一个用法:

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

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

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

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

  • 请注意,该函数接收长整型,因为我想知道它是否在两种情况下都有效。

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

    谢谢,阿萨夫。


    答案必然取决于编译器,体系结构,ABI等。

    在接下来的内容中,我假设所讨论的参数实际上是在栈中传递的,而不是在寄存器中(大的假设!),并且没有任何积极的优化。

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

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

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

    总之,是的。 你不能通过一个short&预计的long& ,所以我认为你的意思是你在这里传球很long&

    链接地址: http://www.djcxy.com/p/20621.html

    上一篇: value passed param Vs. by

    下一篇: Pass by Value and Pass by reference in php