浅析C语言中五大内存管理

来源:互联网 发布:java serverlet 调用 编辑:程序博客网 时间:2024/05/11 02:05

在c++中,内存分为5个区,分别是栈区,堆区,自由存储区,全局/静态存储区和常量存储区.

1.栈区:是编译器在需要的时候分配,不需要的时候自动清除的存储区,一般存储空间比较小,里面放的变量是局部变量,函数参数等;(不会产生碎片)

2.堆区:是我们程序员手动alloc 或者new出来的内存,这块内存需要我们自己手动管理,编译器是不会干预的,在手动内存管理(MRC)中,遵循谁添加谁释放的原则.不然可能会造成内存泄露.另外堆是动态分配内存,并且恨意分配使用很大的内存,使用不当会产生碎片(类似磁盘碎片)在程序结束后,操作系统会自动回收;

3.自动存储区:是由malloc分配的内存块,他和堆十分相似,他的释放是由free关键字来完成;

4.全局/静态存储区,全局变量和静态变量被分配到同一块内存中;static修饰的变量

5.常量存储区:这是一块比较特殊的存储区,他们里面存放的是常量.是不允许被修改的.


注:1.函数体中定义的常量通常是申请在栈上,但是用malloc.realloc等分配的内存的是在堆上;

     2.在栈上存取数据比通过指针在堆上存取数据效率更高.

0 0