关于Windows内存结构

说明

讨论范围是默认的32位的windows NT系统,intel架构。

自己看《Windows内核编程》琢磨出来的东西,也不能确定完全被我理解对了。。

进程虚拟地址空间

32位的操作系统,寻址空间为32Bit,进程的虚拟地址空间为4GB(等于2^32),其虚拟地址空间布局如下所示:

正常情况下,除用户区外,其他的部分程序是不能直接访问的,可以使用类似IsBadReadPtr的函数来检查对目标区的访问权限。

物理存储器

物理存储器即为虚拟地址所关联的真实的物理磁盘,包括内存和硬盘,其主要构成如下所示:

创建进程的时候,首先创建进程的地址空间,该可用地址空间的主体是空闲的,即未分配的,接下来系统给该进程空间保留程序所需的区域(括映像映射区、程序文件映射区以等),最后提交物理存储器给保留的进程区域。对于程序文件映射,其提交的物理存储器即为该程序的内存映射文件(即该程序文件在磁盘上的物理位置)。

关于Windows内存结构

时间: 2024-10-29 15:01:35

关于Windows内存结构的相关文章

OpenCL入门:(三:GPU内存结构和性能优化)

如果我们需要优化kernel程序,我们必须知道一些GPU的底层知识,本文简单介绍一下GPU内存相关和线程调度知识,并且用一个小示例演示如何简单根据内存结构优化. 一.GPU总线寻址和合并内存访问 假设X指向一个32位整数数组的指针,数组首地址是0x00001232,那么一个线程需要访问第0个成员时是也许是如下访问的: int tmp = X[0] 假设内存总线宽度是256位,内存访问时必须和总线宽度对齐,所以内存只能访问0x00000020,0x00000040这种地址(0x20=256位),如

java中的进程与线程及java对象的内存结构【转】

原文地址:http://rainforc.iteye.com/blog/2039501 1.实现线程的三种方式: 使用内核线程实现 内核线程(Kernel Thread, KLT)就是直接由操作系统内核支持的线程,这种线程由内核来完成线程切换,内核通过操作调度器对线程进行调度,并负责将线程的任务映射到各个处理器上.程序一般不会直接去使用内核线程,而是去使用内核线程的一种高级接口——轻量级进程(Light Weight Process,LWP),轻量级进程就是我们通常意义上所讲的线程,由于每个轻量

windows内存管理方式以及优缺点

Windows内存管理方式:页式管理,段式管理,段页式管理 页式管理 将各进程的虚拟空间(逻辑地址)划分为若干个长度相等的页,业内管理把内存空间(物理内存)按照页的大小划分为片或者页面,从而实现了离散分配,然后把页式虚拟地址和内存地址建立一一对应的页表,并用相应的硬件地址变换机构来解决离散地址变化问题,(程序加载时,可将任意一页放入内存中任意一个页框而且这些页框不必连续,从而实现了离散分配)页式管理采用请求调页或预调页技术来实现内外存存储器的统一管理,地址结构由两部分构成,页号+页内地址 其优点

windows内存详解(一) 全面介绍Windows内存管理机制及C++内存分配实例

十分感谢MS社区的帖子,讲得很好~ http://social.technet.microsoft.com/Forums/zh-CN/2219/thread/afc1269f-fe08-4dc7-bb94-c395d607e536 (一):进程空间 在编程中,很多Windows或C++的内存函数不知道有什么区别,更别谈有效使用:根本的原因是,没有清楚的理解操作系统的内存管理机制,本文企图通过简单的总结描述,结合实例来阐明这个机制. 本文目的: 对Windows内存管理机制了解清楚,有效的利用C+

oracle整体结构-内存结构、物理结构、逻辑结构、进程

Oracle的体系结构大体上分为两部分:Instance(实例)和Database(数据库). Instance(实例) :在Oracle Instance中主要包含了SGA以及一些进程(例如:PMON.SMON.DBWn.LGWR.CKPT等).如果一个用户的进程连接到Oracle Server时,其实就是连接到Oracle Instance.在SGA中又包含了5大部件:Share Pool.Database Buffer Cache.Redo Log Buffer.Java Pool.Lar

Windows内存管理和linux内存管理

windows内存管理 windows 内存管理方式主要分为:页式管理,段式管理,段页式管理. 页式管理的基本原理是将各进程的虚拟空间划分为若干个长度相等的页:页式管理把内存空间按照页的大小划分成片或者页面,然后把页式虚拟地址与内存地址建立一一对应的页表:并用相应的硬件地址变换机构来解决离散地址变换问题.页式管理采用请求调页或预调页技术来实现内外存存储器的统一管理.其优点是没有外碎片,每个内碎片不超过页的大小.缺点是,程序全部装入内存,要求有相应的硬件支持.例如地址变换机构缺页中断的产生和选择淘

C与C++之内存结构与管理(二)

阿里P7移动互联网架构师进阶视频(每日更新中)免费学习请点击:https://space.bilibili.com/474380680本篇文章将通过以下两个内容来进行介绍C与C++ C/C++程序的内存结构 C/C++内存管理详解 一.C/C++程序的内存结构 ? 1.1.动态分配内存和静态分配内存 一块程序被加载到内存中,首先,这块内存就存在两种属性:动态分配内存和静态分配内存.静态分配内存:程序编译和链接时就确定好的内存.动态分配内存:程序加载.调入.执行时分配和回收的内存. 1.2.堆栈

一文搞懂jvm内存结构

一.jvm是干什么的? 大家都知道java是跨平台语言,一次编译可以在不同操作系统上运行,怎么做到的呢,看下图: javac把写的源代码(java文件),编译成字节码(class文件),字节码部署到linux/windows/..上,被对应的jvm解释成机器码运行,jvm的工作就是这个. 大家都知道,java不需要开发者写代码来申请.释放和管理内存,jvm在运行时帮助我们做了这个事情,即便如此,我们还是需要了解jvm的内存结构,以便排查各种和内存有关的问题,比如oom,性能调优. 二.jvm内存

JVM内存结构

一.JVM内存结构 1.1 下面总体说说内存 Java虚拟机会将内存分为几个不同的管理区,这些区域各自有各自的用途,根据不同的特点,承担不同的任务以及在垃圾回收时运用不同的算法.总体分为下面几个部分: 程序计数器(Program Counter Register).JVM虚拟机栈(JVM Stacks).本地方法栈(Native Method Stacks).堆(Heap).方法区(Method Area) 1.2 下面说说具体各个结构的功能 1.2.1.程序计数器(Program Counte