本文和传统的内存优化不一样,不是讲如何降低内存占用,而是讲编程开发中要注意的内存问题以及一些内存技术的演变与原理。
本文很长,目录如下:
对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下开发经验呀!
1: Application进程的内存分段
应用程序的内存分为: 代码段, 数据段, 栈, 堆。
代码段:
用来存放代码的二进制指令与一些常量和常量字符串, 进程启动以后划分出来,把代码指令加载到代码段,一直占用内存,并且只读不可修改。
数据段:
用来存放代码中的静态全局变量,进程启动后,加载程序文件后,内存分配出来,并一直占用内存,直到进程结束。
栈:
栈有多大呢?其实栈的内存大小是相对比较小的,一般是由编译器生成执行文件的时候指定的,这个编程发布者可以改的,你在发布代码的时候,可以给编译器设置栈大小。一般栈默认是几百k, 有时候为了应对特殊的情况,配置编译器,把栈大小调整到1M甚至更大。栈溢出, 当栈的使用超过大小的额定范围,OS会抛出异常”栈溢出”,然后杀掉溢出的进程。比如一个算法是用递归写的,由于递归的层次比较深,导致栈溢出,这时候我们可以减少栈的内存使用或调整编译器来配置更大的栈。如图1.2 vs 编译C++时栈的配置: