• 虚拟内存布局、内存的分工、堆与栈


    进程的虚拟内存空间分为两个部分。低2GB(或3GB_)由应用程序使用。高2GB(或1GB)

    由系统内核程序使用。

    系统内核的内存空间中包含驱动程序,系统内核可运行程序、用于内存管理的数据结构(页文件夹、页表等),用于进程管理、线程调度的数据结构、各种中断处理程序,系统缓存等。

    应用程序可使用的低地址空间中包含了应用程序的代码、数据(全局变量等)、系统和用户DLL的代码、各线程的栈、堆等。

    栈和堆是两种重要的内在管理形式。

    进程的每一个线程都有自己的栈,栈与函数的调用、运行和返回及局部变量的保存相关,普通情况下,栈中保存着函数的參数、返回地址和局部变量,调用函数将參数入栈,调用指令将函数返回地址入栈,被调用函数负责保存调用函数的相关栈指针,为局部变量分配空间等,而堆是一种能够动态分配和释放的内存,由堆管理器进行管理,用户在程序中使用的内存分配函数都是通过堆进行分配的。

    开发者仅仅须要了解下面内容

    (1)虚拟地址空间中的数据是分页管理的。
    (2)应用程序不用考虑系统中其它应用程序的内存使用情况,如占用了多少内存、占用了哪些内存等。
    (3)虚拟地址并非物理地址空间中的地址。不是数据在内存中真实存在的地址。操作系统会将进程的虚拟地址映射到真实的物理内存的地址。


    (4)进程也不用考虑真实的物理内存有多大。仅仅须要了解能够使用2GB(普通情况下)的内存。操作系统负责转换。


    (5)假设系统中没有足够的物理内存供使用,那么操作系统会将当前没有使用的内存分页“调度”到硬盘上保存起来。页面调度不会造成内存中的数据在虚拟地址空间中地址的改变。所以进程不须要知道内存分页是怎样调度的。不须要知道内存中保存的数据是在内存中还是在硬盘上,仅仅须要知道其虚拟地址就能够了。


    在创建进程时,系统将应用程序的可执行文件载入到内存中,设置相关环境后,開始启动执行。要执行一个程序(exe文件),系统会创建进程。

    系统先在自己的内存管理单元中构造出一个虚拟地址空间,供进程使用,然后将exe文件载入到进程的虚拟地址空间内存中指定的位置,配置程序数据和调用接口等,然后再创建主线程。进程是正在执行的程序。即程序的执行实例。

  • 相关阅读:
    NGUI 3.5课程(五岁以下儿童)button-图片切换
    跑openstack命令错误【You must provide a username via either -...】
    angular cors跨域资源共享设置 和formdata设定
    PHP 如何获取客户端ip地址
    JavaScript如何生成思维导图(mindmap)
    百度ueditor上传图片时如何设置默认宽高度
    英语发音规则---E字母常见的发音组合有哪些
    google搜索引擎爬虫爬网站原理
    legend2---开发日志10(ajax请求的方法是否同样会执行base控制器里面的方法)
    JS中如何判断对象是对象还是数组
  • 原文地址:https://www.cnblogs.com/llguanli/p/7117832.html
Copyright © 2020-2023  润新知