zoukankan      html  css  js  c++  java
  • 堆内存 栈内存 虚拟内存 动态内存管理

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

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

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

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

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

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

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

    指针 数组和栈:

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

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

  • 相关阅读:
    用户、群组、权限
    分页提纲
    网页分页显示
    OMR数据查询
    ORM增删改查询例题
    人工智能将推动云存储和数据服务的创新
    如何在智能家居中提高IoT安全性?
    云计算是物联网的重要支柱
    一个高薪的码农,应具备的8种能力
    如何跨越比特币的认知障碍?
  • 原文地址:https://www.cnblogs.com/jieruishu/p/4036916.html
Copyright © 2011-2022 走看看