内存与地址
如果把内存类比为一座城市,那么地址就是城市里的街道和门牌号。数据就像是居民,居住在房子里,每座房子都有一个地址。而房子都是为居民量身打造的,房子的面积单位不是平方米,而是字(byte,即8 bit)。在C++中,往往不仅要求你知道房子的地址,还要求你知道房子里居民的种族(类型)。
指针
C++中的指针是一种特殊的对象,专门用于保存地址。指针的类型实际上是以指针所指向的地址及其之后所保存的对象的类型。
new与malloc
malloc()是C中申请内存的写法,返回值是一个void指针;而new返回值是一个对象指针,因此极力推荐使用new而非malloc()。
堆和栈
每个程序都会得到操作系统分配的一片内存,这一片内存又被程序自身分成两个部分即堆和栈。
栈是程序生命周期的体现。举个例子,栈是一栋大楼,每个居民按照先后顺序从地表往上自己盖一层楼住,且楼下的住户不得在楼上有人时搬出去(不然的话大楼就塌了)。
而堆则是与生命周期无关的一片空间,只能用new(不建议使用C中的方法)来申请,并以delete来取消对堆空间的占用。在堆中的对象的生命周期与程序一致,因此如果一个需要长期运行的程序不对堆空间进行妥善管理,会导致严重的内存泄漏,即该程序占用的整体内存很大,会影响计算机的运行。