值通过参数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&
。