C++变量的引用是否占用内存空间

变量的引用:int &b = a;

根据引用的定义,b作a的别名,不单独占用内存空间。如果取b和a的地址,会发现它们是相同的。

但程序怎么知道b是指向a的呢?如果b是个指针,程序将开辟一块内存空间,存储“b指向a”这一信息;如果没有一块内存空间来存储“b指向a”这一事实,程序读到b时应该不知所措,怎么能顺利知道b是a的别名呢?

实际上,b在内存条上是占用了一块空间的。不过编译器对它进行了一些处理,使得程序认为它不单独占用内存空间,且取其地址时直接取到所指向的地址。实际在内存空间上,引用本身也占用一块内存,里面存储着所引用的变量的地址,大小与指针相同,字面上也表现为unsigned long int型。只是经过编译器处理后,访问这块内存时将直接转而访问其指向的内存。因此在程序中无法读取到这块内存本身。

这可以理解为“编译器的把戏”或“程序的谎言”,但这一机制不是为了捉弄程序员,而是为了真正实现别名的效果。

综上:引用的实现实际上是占用内存空间的,但程序把它按照不占用内存空间来处理。

在不同编译器中,引用的实现方式可能会有不同。C++语言本身对此实现机制并无说明。因此上述实现机制可能仅适用于部分编译器。

补充:引用的“不占用内存"和宏定义的”不占用内存“不是一回事。二者都可以理解为”别名“,但引用是在程序运行过程中声明的,属于程序运行的层面;而宏定义是代码编译层面的,类似于对代码文本进行”全文替换“,不涉及程序运行,是真正的不占用内存。

你可能感兴趣的:(c++,编译器,内存管理)