首页 > 代码库 > 堆内存 栈内存 虚拟内存 动态内存管理
堆内存 栈内存 虚拟内存 动态内存管理
从编译器角度来看内存分三种情况:
1 系统初始化时都已经确定好、不会再变动的内存区域,一般指的是全局变量、静态变量数组等。
2 栈上内存:一般指的是函数内部的局部变量等,函数调用时分配内存,调用结束后系统自动释放不用自己考虑回收,效率高。有时候栈需要自己设定,设定不当可造成栈溢出。
3 堆上内存:即用动态分配函数分配的内存属于堆上内存,适合那些有MMU(内存管理)、开始不确定需要申请多大内存的场合。注意:利用动态分配内存函数,使用完毕要及时释放内存和将指针清0,否则容易产生野指针和内存泄露。因为系统不负责释放。同时频繁调用还容易造成内存随便,需要涉及内存碎片整理和回收算法。
虚拟内存和直接操作内存:
嵌入式系统一般资源有限,通常开发者直接对内存分区,对内存操作需要开发者对内存的整体使用情况有了解。ucos在系统初始化时先将内存分为几个固定大小的缓冲池,任务申请内存从某个缓冲池中申请内存,用完后释放回内存池。
PC机一般资源丰富,上层应用程序开发者通过虚拟内存来操作,屏蔽底层的实际物理内存地址。
指针 数组和栈:
指针是语言工具,动态分配函数都通过指针来操作。
数组和栈都属于数据结构。对于数据量小且固定的可以使用静态存储结构的数组;函数调用一般是栈的操作,注意堆栈的设置要合理。避免堆栈深度不足,造成调用时参数丢失;堆栈深度过深,效率变低。
堆内存 栈内存 虚拟内存 动态内存管理
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。