内存管理中,我们还需要掌握相关函数,比如malloc、realloc、calloc、memset、free等,不一一介绍,具体用法可以上网查阅。
???????????????? 下面重点讲一下栈与堆的区别:
(1)????????????管理方式不同:栈编译器自动管理,无需程序员手工控制;而堆空间的申请释放工作由程序员控制,容易产生内存泄漏。
(2)????????????空间大小不同:栈是向低地址扩展的数据结构,是一块连续的内存区域;堆是向高地址扩展的数据结构,是不连续的内存区域。
(3)????????????是否产生碎片:对于堆来讲,频繁的malloc/free(new/delete)势必会造成内存空间的不连续,从而造成大量的碎片,使程序效率降低(虽然程序在退出后操作系统会对内存进行回收管理)。对于栈来讲,则不会存在这个问题。
(4)????????????增长方向不同:堆的增长方向是向上的,即向着内存地址增加的方向;栈的增长方向是向下的,即向着内存地址减小的方向。
(5)????????????分配方式不同:堆都是程序中由malloc()函数动态申请分配并由free()函数释放的;栈的分配和释放是由编译器完成的,栈的动态分配由alloca()函数完成,但是栈的动态分配和堆是不同的,他的动态分配是由编译器进行申请和释放的,无需手工实现。
(6)????????????分配效率不同:栈是机器系统提供的数据结构,计算机会在底层对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行。堆则是C函数库提供的,它的机制很复杂。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-64246-2.html
泪奔
我们趁这个机会宣布南海防空识别区了