Edu*_*yan 0 c++ memory pointers reference
考虑这两个文件:
//main1.cpp
int main()
{
int a = 0;
int &b = a;
}
//main2.cpp
int main()
{
int a = 0;
int *b = &a;
}
Run Code Online (Sandbox Code Playgroud)
当我用gcc -S选项编译它并比较2个汇编器输出时,它们是完全相同的输出.那么为什么有些书说参考变量不使用额外的内存呢?
Mik*_*our 10
未指定引用是否占用内存.如果编译器可以确定它所引用的对象,那么它可以简单地将引用用作该对象的备用"名称",而不需要任何运行时信息.如果不能,那么引用将需要保持其目标的地址,就像指针一样.
指针是对象,因此像任何其他对象一样占用内存.但是,"似乎"规则下的优化意味着如果程序的行为依赖于它们,对象只需要占用内存; 例如,如果您打印其地址.因此,如果编译器可以确定指针指向哪个对象,那么它可以通过直接访问该对象的指针替换间接访问,并且可能完全删除指针.
相同的优化规则意味着,在您的示例中,所有变量都可以删除,因为它们没有任何效果.
| 归档时间: |
|
| 查看次数: |
74 次 |
| 最近记录: |