导图社区 C语言内存管理
这是一篇关于中心主题的思维导图,主要内容包括:内存篇,内存分配的几种方式、堆和栈的区别、c++的内存管理是怎样的等。
社区模板帮助中心,点此进入>>
中心主题
主题
内存篇
内存分配的几种方式
1、栈上分配
局部变量,函数形参,返回数据,返回地址
2、静态全局存储区(data段,bss段)
全局变量,静态变量(全局,局部)
3、堆上分配
(new,free,malkoc,free)
c++的内存管理是怎样的
1、代码段(只读存储和文本区,字符串常量,文本区存储程序的机械代码)
2、数据段(全局变量、静态变量)
3、BSS段(未初始化的全局变量和静态变量)
4、堆(调用new/malloc申请的内存空间,地址由低地址向高地址扩张)
5、映射区(存储动态链接库以及调用mmap函数的文件映射)
6、栈(局部变量、函数的返回值,函数的参数,地址由高地址向低地址扩张)
堆和栈的区别
1、申请方式不同
栈是由操作系统自由分配和释放,堆是由程序员手动申请释放
2、申请大小的限制
栈是向低地址申请的空间,一块连续的内存。栈的大小和地址是由系统预先规定好的
这是由于系统使用链表来存储的空闲内存地址
申请效率
栈使用的是一级缓存, 它们通常都是被调用时处于存储空间中,调用完毕立即释放
堆则是存放在二级缓存中,速度要慢些
堆栈溢出一般是由什么原因导致的
1、函数递归调用太深,递归无法返回,导致栈无法容纳这些调用返回的地址而造成栈溢出。
动态申请空间
数组访问越界
指针非法访问