码迷,mamicode.com
首页 > 其他好文 > 详细

堆内存 栈内存 虚拟内存 动态内存管理

时间:2014-10-20 13:21:39      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:os   使用   数据   算法   管理   应用   程序   数据结构   函数   

从编译器角度来看内存分三种情况:

1 系统初始化时都已经确定好、不会再变动的内存区域,一般指的是全局变量、静态变量数组等。

2 栈上内存:一般指的是函数内部的局部变量等,函数调用时分配内存,调用结束后系统自动释放不用自己考虑回收,效率高。有时候栈需要自己设定,设定不当可造成栈溢出。

3 堆上内存:即用动态分配函数分配的内存属于堆上内存,适合那些有MMU(内存管理)、开始不确定需要申请多大内存的场合。注意:利用动态分配内存函数,使用完毕要及时释放内存和将指针清0,否则容易产生野指针和内存泄露。因为系统不负责释放。同时频繁调用还容易造成内存随便,需要涉及内存碎片整理和回收算法。

虚拟内存和直接操作内存:

嵌入式系统一般资源有限,通常开发者直接对内存分区,对内存操作需要开发者对内存的整体使用情况有了解。ucos在系统初始化时先将内存分为几个固定大小的缓冲池,任务申请内存从某个缓冲池中申请内存,用完后释放回内存池。

PC机一般资源丰富,上层应用程序开发者通过虚拟内存来操作,屏蔽底层的实际物理内存地址。

指针 数组和栈:

指针是语言工具,动态分配函数都通过指针来操作。

数组和栈都属于数据结构。对于数据量小且固定的可以使用静态存储结构的数组;函数调用一般是栈的操作,注意堆栈的设置要合理。避免堆栈深度不足,造成调用时参数丢失;堆栈深度过深,效率变低。

堆内存 栈内存 虚拟内存 动态内存管理

标签:os   使用   数据   算法   管理   应用   程序   数据结构   函数   

原文地址:http://www.cnblogs.com/jieruishu/p/4036916.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!