标签:内存地址 参数 编译器 汇总 手动 空间 情况 没有 回收机制
这个问题感觉分开来讨论比较好。
首先说栈溢出:
(1)我们都知道局部变量存在栈中,要是在局部变量中存储了一个很大的数组,有可能导致栈溢出。
(2)还有就是函数的参数也是存在栈里面,传递参数时尽量使用指针,要是一粗心将一个很大的数组作为参数传入,就有可能导致栈溢出。
(3)函数的调用层次太深,最坏的情况是无限递归调用。函数递归调用时,系统要在栈中不断保存函数调用时的现场和变量,要是调用层次太深,也可能出现栈溢出。
再谈谈堆溢出:
C不像python这种高级语言,C没有垃圾资源自动回收机制,堆也不像栈那样,由编译器自动分配和释放,堆是手动分配释放的。如果动态申请空间后不及时释放,这种情况可能会导致堆溢出。
int x = 20;
int &b = a;(等价于int * const b = &a)
相同点:
可以说引用相当于指针,引用和指针在编译时的方法一样,指向的都是变量的内存地址。
不同点:
(1)引用存储的是变量值,而指针是指向一个变量,存储的是地址
(2)引用必须被初始化,也就是只能对已经存在的变量或对象实现引用,而指针不需要,指针可以为空
(3)引用不需要分配单独的内存空间,他是直接访问变量;指针是间接访问,需要单独分配内存空间。
标签:内存地址 参数 编译器 汇总 手动 空间 情况 没有 回收机制
原文地址:https://www.cnblogs.com/ralap7/p/9054848.html