指针和引用如何保存在内存中

How pointers and references are held in memory

本文关键字:存在 内存 何保 引用 指针      更新时间:2023-10-16

考虑以下两个文件:

//main1.cpp
int main()
{
    int a = 0;
    int &b = a;
}
//main2.cpp
int main()
{
    int a = 0;
    int *b = &a;
}

当我用gcc -S选项编译它并比较2个汇编器输出时,它们是完全相同的输出。那么,为什么有些书说引用变量不使用额外的内存呢?

引用是否占用内存未指定。如果编译器可以确定它引用的对象,那么它可以简单地使用引用作为该对象的替代"名称",而不需要任何运行时信息。如果不能,则引用需要保存其目标地址,就像指针一样。

指针是对象,所以和其他对象一样占用内存。然而,"as if"规则下的优化意味着对象只有在程序的行为依赖于它们这样做时才需要占用内存;例如,如果打印它的地址。因此,如果编译器可以确定该指针指向哪个对象,那么它就可以用对该对象的直接访问来替换通过该指针的间接访问,甚至可能完全删除该指针。

同样的优化规则意味着,在你的两个例子中,所有的变量都可以被删除,因为它们没有效果。