C/C++教程

C++内存管理(一)

本文主要是介绍C++内存管理(一),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一、内存管理

1.内存分配方式:

在C++中,内存分为五个区:堆、栈、自由存储区、全局/静态存储区和常量存储区。

      栈:在执行函数时。函数内部局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元被自动释放。栈内存分配运算内置于处理器的指令集中,效率很高,但可分配内存有限。

      堆:由new分配的内存块,编译器不释放,由应用程序控制。一般一个new对应一个delete,如果未释放,程序结束时系统自动回收。

      自由存储区:由malloc等分配的内存块,与堆相似,用free释放。

      全局/静态存储区:全局变量和静态变量被分配到同一块内存中。

      常量存储区:特殊的存储区,存放常量,不允许修改。

malloc()函数,动态分配内存空间:malloc()函数在堆分区分配一块指定大小的内存空间,用来存放数据,这块内存在函数执行结束后不会被初始化,它们的值是未知的。

函数原型:void* malloc (size_t size);返回值:分配成功返回指向该内存的地址,失败则返回 NULL。

2.堆和栈的区别:

2.1管理方式:栈由编译器自动管理,无需手动控制。

                     堆由程序员控制,容易产生memory leak。

2.2空间大小:栈的默认大小一般不会超过1M,但堆可以达到4G的空间。

2.3碎片问题:对于堆频繁的new/delete会造成内存空间的不连续,造成大量碎片,降低程序效率。栈没有碎片。

2.4生长方向:对于堆来说,生长方向向上,向着内存地址增长的方向。

                       对于栈来说,生长方向向下,向着内存地址减小的方向。

2.5分配方式:堆都是动态分配的,栈有动态分配和静态分配。

2.6分配效率:栈是机器系统提供的数据结构,计算机会在底层对栈提供支持,分配专门的寄存器存放栈的地址。压栈出栈都有专门的指令执行,效率比较高。

                       堆是C++函数提供的,机制复杂,所以效率低。

这篇关于C++内存管理(一)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!