017 虚拟内存

# 内存
  ● 物理内存
    ○ 电脑上面的内存条
    ○ 4G 8G 16G 32G 物理内存是死的,不会增长的
    ○ 物理内存可以跟CPU进行通信,所以电脑上面必须有物理内存
    ○ 应用程序开发的时候,我们根本无法接触到物理内存。
  ● 虚拟内存
    ○ 多个进程 每个都分配虚拟地址空间
    ○ 模拟所有物理内存的功能
    ○ 当我们要执行这个程序的时候,只需要把虚拟内存空间,加载到内存即可
    ○ 应用程序开发的时候,我们根本无法接触到物理内存。
      不管是加载卸载虚拟内存,都是我们操作系统完成的
    ○ 虚拟内存有什么用
      每个进程分配一个额定大小的空间
      32位系统 : 4GB CPU寻址大小
      64位系统:16EB CPU寻址大小
        32位程序可以运行在64位系统上运行
        64位程序不可以运行在32位操作系统
    ○ 32位操作系统
      最大寻址 0x0-0xFFFFFFF
    ○ 64位操作系统
      最大寻址 0x0-0xFFFFFFFFFFFFFFFF
    ○ 每个进程拥有的虚拟内存空间,是私有的,别人无法打开或者读取的
      A进程 0x12345678 指向的内存地址空间是不一样的
      B进程 0x12345678 指向的内存地址空间是不一样的

时间: 2024-10-12 02:02:51

017 虚拟内存的相关文章

017 虚拟内存页面区块 4

● VirtualQueryEx 函数 功能:检索在指定进程的虚拟地址空间内的一系列页面的信息. 函数参数 参数1:hProcess [in] 进程句柄 参数2:lpAddress [in, optional] 查询虚拟内存地址 参数3:lpBuffer [out] MEMORY_BASIC_INFORMATION 结构体指针 参数4:dwLength [in] 结构体指针的大小 返回值: 函数写入lpBuffer的字节数,如果不等于sizeof(MEMORY_BASIC_INFORMATION

017 虚拟内存2

用户地址空间 ● 内存的分配 ○ 当进程被创建并赋予它的地址空间时,该可用地址空间的主体是空闲的,即未被分配的. 若要使用该地址空间的各个部分,必须通过调用 VirtualAlloc函数来分配它里边的各个区域. 每当你保留地址空间的一个区域时,系统要确保该区域从一个分配颗度的边界开始. 当你保留地址空间的一个区域时,系统还要确保该区域的大小是系统的页面大小倍数. ● 分配颗粒 ○ 所有CPU平台都会使用相同的分配颗粒即 64KB. ● 页面大小 ○ 4KB ● VirtualAlloc 函数 函

虚拟内存运行原理!

                                   虚拟内存运行原理! 在系统中运行的每个进程都需要使用到内存,但不是每个进程都需要每时每刻使用系统分配的内存空间.当系统运行所需内存超过实际的物理内存,内核会释放某些进程所占用但未使用的部分或所有物理内存,将这部分资料存储在磁盘上直到进程下一次调用,并将释放出的内存提供给有需要的进程使用. 在Linux内存管理中,主要是通过"调页Paging"和"交换Swapping"来完成上述的内存调度.调页算法

linux内存管理-虚拟内存总结

面试被问到虚拟内存,回答的感觉不够.于是重新总结一下. 程序猿对内存的要求都是:私有的.速度快.容量无限大. 对应现在的现况:使用一块物理内存.容量有限.并且速度有限,需要cpu多级缓存. 物理内存暴露给进程存在问题:1.如果可以寻址内存的每个字节,容易破坏操作系统以及其他进程 解决方法1 通过基址寄存器与界限寄存器 前置保存起始物理地址,后者保存地址长度:解决了地址私有化的问题. 交换技术  仍然使用两个寄存器,会产生内存空洞:就算使用内存紧缩技术(移动进程空间),也会大量占用cpu时间: 虚

最好的方式是用VirtualAlloc分配虚拟内存,它既不是在堆也不是在栈,而是直接在进程的地址空间中保留一块内存

申请效率的比较 栈:由系统自动分配,速度较快.但程序员是无法控制的. 堆:是由new分配的内存,最好的方式是用VirtualAlloc分配虚拟内存,它既不是在堆也不是在栈,而是直接在进程的地址空间中保留一块内存,虽然用起来最不方便,但是速度快也最灵活. http://blog.csdn.net/houqd2012/article/details/25070987

[Java]虚拟内存大小设置

部分内容来自:http://www.cnblogs.com/jinzhenshui/p/3345895.html 当初始化一个 byte[] 变量时,如果写成了这样 byte[] b = new byte[1024 * 1024 * 1024]; 你可以看到报错: Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 这个错误表示需要设置参数增加虚拟内存大小 对项目右键 -> Debug -&

linux系统添加swap虚拟内存与删除配置方法

兄弟连Linux培训教程 linux系统添加swap虚拟内存与删除配置(www.lampbrother.net) 1.swap概述 Swap分区,即交换区,Swap空间的作用可简单描述为:当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用.那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap中恢复保存的数据到内存中.这样,系统总是在物理内存不够时,才进行Swap交换. 其实

操作系统思考 第三章 虚拟内存

第三章 虚拟内存 作者:Allen B. Downey 原文:Chapter 3 Virtual memory 译者:飞龙 协议:CC BY-NC-SA 4.0 3.1 简明信息理论 比特是二进制的数字,也是信息的单位.一个比特有两种可能的情况,写为0或者1.如果是两个比特,那就有四种可能的组合,00.01.10和11.通常,如果你有b个比特,你就可以表示2 ** b个值之一.一个字节是8个比特,所以它可以储存256个值之一. 从其它方面来讲,假设你想要储存字母表中的字母.字母共有26个,所以你

Redis教程(十一):虚拟内存介绍:

转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/138.html 一.简介: 和大多NoSQL数据库一样,Redis同样遵循了Key/Value数据存储模型.在有些情况下,Redis会将Keys/Values保存在内存中以提高数据查询和数据修改的效率,然而这样的做法并非总是很好的选择.鉴于此,我们可以将之进一步优化,即尽量在内存中只保留Keys的数据,这样可以保证数据检索的效率,而Values数据在很少使用的时候则可以被