通过引用传递的param Vs的值的内存消耗
Memory consumption of by-value passed param Vs. by-reference
可能的重复:
通过引用传递和通过值传递之间有什么区别?
我知道这个标题可以代表许多其他已回答的问题,我相信我的特定问题在其他线程中没有得到回答(我已经搜索过了,如果是重复的,很抱歉)。
商业:考虑下一个签名:
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位,这取决于平台)
注意,函数接收long int类型,我想知道它是否在这两种情况下都有任何效果。
还有一个小问题——有人能发布一个编译器不会使用指针通过引用实现传递参数的例子吗?
谢谢,阿萨夫。
答案必然取决于编译器、体系结构、ABI等。
在接下来的内容中,我假设有问题的参数实际上是在堆栈中传递的,而不是在寄存器中传递的(大假设!),并且没有积极的优化。
在情况A中,参数是按值传递的,这是否意味着它将消耗sizeof(short int)字节?
否,它将消耗sizeof(long int)
字节,因为它将首先被加宽以匹配MyFunction()
的签名。
在情况B中,参数是通过引用传递的,假设编译器将使用指针来实现它,这是否意味着它将消耗大小为(pointer_type)字节的
总之,是的。你不能在需要long&
的地方传递short&
,所以我认为你的意思是在这里传递long&
。
相关文章:
- 将字符串存储在c++中的稳定内存中
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- Win32编译器选项和内存分配
- 当vector是tje全局变量时,c++中vector的内存管理
- 带内存和隔离功能的SQLite
- 可视化 使用 VS Code 查找C++应用程序中的内存泄漏
- 带有 GDB 调试器的 VS 代码内存视图
- C++ 动态内存分配 VS 自动内存分配
- VS 2008 和 VS 2017 之间的可视化C++内存管理更改
- 通过引用传递的param Vs的值的内存消耗
- VS 2010 中的内存限制与 c++ 或只是另一个错误
- 在VS C++ 6.0中,哪些调试工具适合查找内存泄漏的位置
- 内存的字节读取:"signed char *" vs "unsigned char *"
- 类重载new和delete vs放置new与定制的内存类
- 双插槽vs单插槽内存模型
- 使用指针VS不使用指针的内存分配
- 字素生成时间vs.内存复杂度
- 内存分配- Java vs c++
- 当查看内存转储的调用堆栈时,如何在VS中指定源代码目录