指针和引用如何保存在内存中
How pointers and references are held in memory
考虑以下两个文件:
//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"规则下的优化意味着对象只有在程序的行为依赖于它们这样做时才需要占用内存;例如,如果打印它的地址。因此,如果编译器可以确定该指针指向哪个对象,那么它就可以用对该对象的直接访问来替换通过该指针的间接访问,甚至可能完全删除该指针。
同样的优化规则意味着,在你的两个例子中,所有的变量都可以被删除,因为它们没有效果。
相关文章:
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 为什么以下C++代码中存在内存泄漏?
- 以下代码是否存在内存泄漏?
- 存在内存访问异常,但我不确定我的代码中出了什么问题
- gpc服务器不会释放内存,是否存在内存泄漏?
- 存在内存泄漏问题的链接列表
- QT图像查看器示例,可能存在内存泄漏
- 为什么堆栈中的函数局部变量之间存在内存空间
- C :当居民记忆缓慢增加时,是否存在内存泄漏
- 是否存在内存泄漏,如果是,为什么?
- 如果函数返回 std::vector<std::string>,是否存在内存泄漏?
- 检测到指针引用可能存在内存泄漏
- 是否可能存在内存泄漏以在堆上分配shared_ptr
- 在这个关于指针的C++代码示例中是否存在内存泄漏
- 是否存在内存泄漏
- 尽管释放了分配的内存,但仍存在内存泄漏
- 复制构造函数中存在内存泄漏
- 优先级队列中可能存在内存泄漏
- C++中非常大的数组存在内存问题
- 如果我将一个POD结构分配给另一个POD组织,是否存在内存泄漏