一、指针与引用的区别程序员
从四个方面出发考虑不一样点缓存
(1)从定义出发,指针是一个变量,所存内容为指向变量在内存中的存储地址;而引用只是原变量的一个别名,和原变量占同一个存储单元。数据结构
(2)初始化:指针能够初始化为NULL,能够改变指向的内容;而引用不能够,在使用时必须初始化,且初始化后不能改变。函数
(3)使用:在使用时,指针能够多级(**p),而引用只能一级;引用使用时无需解引用(*),指针须要解引用。spa
(4)大小:"sizeof引用"获得的是所指向的变量(对象)的大小,而"sizeof指针"获得的是指针自己的大小指针
2.堆和栈的区别对象
2.1 概念内存
堆、栈是一种数据按序排列的数据结构。编译器
在一个由C/C++编译的程序占用的内存分为四部分:栈区、堆区、静态存储区、代码区。编译
2.2 区别
(1)堆栈空间分配
栈:由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。
堆:通常由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。在运行时动态分配内存。
(2)堆栈缓存方式
栈:一级缓存,使用完当即释放。
堆:二级缓存
(3)堆栈数据结构区别
栈:栈是一种后进先出的数据结构。
堆:能够当作是一棵树。
(4)申请大小的限制
栈:栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意
思是栈顶的地址和栈的最大容量是系统预先规定好的,在WINDOWS下,栈的大小是2M(也有
的说是1M,总之是一个编译时就肯定的常数),若是申请的空间超过栈的剩余空间时,将
提示overflow。所以,能从栈得到的空间较小。
堆:堆是向高地址扩展的数据结构,是不连续的内存区域。这是因为系统是用链表来存储
的空闲内存地址的,天然是不连续的,而链表的遍历方向是由低地址向高地址。堆的大小
受限于计算机系统中有效的虚拟内存。因而可知,堆得到的空间比较灵活,也比较大。
可是容易产生碎片。