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