Do C 参考需要任何内存
Do C++ references take any memory?
可能的重复:
C 中的参考变量大小
C 参考是否会消耗任何内存?如果没有,如何将它们作为参数传递给函数?
有时他们会这样做,有时没有。当他们需要(例如用作数据成员时)时,他们会这样做。
以示例他们不需要:
int a = 1;
int &b = a;
现在,编译器可以将b
视为a
的别名。从来没有需要在此处分配b
的内存,因为参考不是对象。
另一种可能引起的案例:
int some_function_call(); // function returns by value
const int &c = some_function_call();
在这种情况下,c
是对呼叫的返回值的临时对象的引用。临时性的寿命扩展到c
的范围,因此从某种意义上说,您可以说c
消耗了一块插件的内存。但是,没有特别的理由要求编译器分配更多的东西。您可能会看到与编写const int c = some_function_call();
相同的发射代码,该代码还可以创建一个具有相同寿命和同名c
的int
对象。
至于将它们作为参数传递 - 这取决于参数是否占据内存。一些参数可能会通过寄存器传递。然后,这取决于Callee代码,该寄存器是否最终会在执行功能期间溢出到某个地方。但是,是的,当通过参数传递和函数调用未夹住时,参考参数必须占据"某物",因为呼叫者必须以某种方式让callee知道引用所指的对象的地址(" referand")。p>如果您不接受指针的地址,则可以说所有相同的话。但是,就指针而言,这是对编译器自己的主动性的优化。在参考的情况下,它们在标准中明确定义为别名,而在编译器无法将参考视为纯粹作为条目的情况下,指针(或任何比率地址)恰好是实施该指示的一种明显手段在其编译时名称查找表中。唯一的本质区别是标准所描述的抽象计算机中发生的情况 - 实施和优化之后,它可能构成同一件事。
相关文章:
- 尝试摆脱任何堆内存分配
- 为什么瓦尔格林德在不释放恶意内存后没有报告任何问题?
- c++ 编译器是否保护常量内存地址免受任何更改?
- 对于堆上的页面对齐内存分配是否有任何优化或不同的 API?
- 在没有任何锁的情况下加入另一个线程后是否需要内存围栏?
- 如果 RMW 操作没有任何变化,是否可以针对所有内存顺序对其进行优化
- 指针可以用于访问内存中的任何任意区域吗?
- QaudioOutput代码是否有任何内存泄漏
- Do C 参考需要任何内存
- 此代码中是否有任何内存泄漏
- 两个线程之间是否存在任何内存泄漏(缓冲、清空)
- 字符 *str;str= "HELLO" ;如何在不为字符串分配任何内存的情况下工作?
- 如何在c++中声明变量我不想定义它,所以它不应该只消耗声明中的任何内存
- 从任何内存地址读取UInt32的最有效方法
- 阻止向特定应用程序注入任何内存或DLL文件
- Valgrind 没有检测到任何内存泄漏。这有多安全?
- 在C/ c++中通过int main()返回0,在任何操作系统上,清除程序在任何(RAM,缓存或任何…)内存中使用的所有
- 函数中是否有任何内存泄漏,如function(new Foo())
- 我可以读取任何内存值吗
- 初始化const-char*,去掉任何内存泄漏