内存分配可以分为5个区
栈区(stack)
这个一般由编译器操作,或者说是系统管理,会存一些局部变量,这些系统都会帮我们自动实现,无需我们干预,所以大量的局部变量,深递归,函数循环调用都可以耗尽栈内存而程序崩溃
堆区(heap)
一般由程序员管理,比如alloc申请内存,free释放内存,我们创建的对象也都放在这里
全局区(静态区 static)
全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域,程序结束后由系统释放。
常量区
常量字符串就是放在这里的,还有const常量
代码区
存放代码,app程序会拷贝到这里,程序不是在
图中各个区并不连续
当一个app启动后,代码区,常量区,全局区地址已经固定,因此指向这些区的指针不会为空而产生崩溃性的错误,而堆区和栈区是时时刻刻变化的(堆的创建销毁,栈的弹入和弹出),所以当使用一个指针指向这两个区里面的内存时,一定要注意内存是否已经被释放,否则会产生程序崩溃