C++内存分区
注:摘自《王道程序员求职宝典》。
1. 堆
由程序员手动分配和释放,完全不同于数据结构中的堆,分配方式类似链表。由malloc(C语言)或new(C++)来分配,free(C语言)和delete(C++)释放。若程序员不释放,程序结束时由系统释放。
2. 栈
由编译器自动分类和释放,存放函数的参数值、局部变量的值等。操作方式类似数据结构中的栈。
3. 全局(静态)存储区
存放全局变量和静态变量。包括DATA段(全局初始化区)和BSS段(全局未初始化区)。其中,初始化的全局变量和静态变量存放在DATA段,未初始化的全局变量和未初始化的静态变量存放在BSS段。程序结束后由系统释放。
注:BSS段的特点是:在程序执行之前BSS段会自动清0。所以,未初始化的全局变量与静态变量在程序执行之前已经被初始化为0了。
4. 文字常量区
存放常量字符串。程序结束后由系统释放。
5. 程序代码区
存放函数体的二进制代码。