
说起来只是装载到内存里面这一句话的事儿,实际上装载器需要满足两个要求。
第一,可执行程序加载后占用的内存空间应该是连续的 ,执行指令的时候,程序计数器是顺序渗简地一条一条指令执行下去。这也就意味着,这一条条指令需要连续地存储在一起。
第二,我们需要同时加载很多个程序,并且不能让程序自己规定在内存中加载的位置。 虽然编译出来的指令里已经有了对应的各种各样的内存地址,但是实际加载的时候,我们其实没有办法确保,这个程序一定加载在哪一段内存地址上。因为我们现在的计算机通常会同时运行很多个程序,可能你想要的内存地址已经被其他加载了的程序占用了。
要满足这两个基本的要求,我们很容易想到一个办法。那就是我们可以在内存里面,找到一段连续的内存空间,然后分配给装载的程序,然后把这段连续的内存空间地址,和整个程序指令里指定的内存地址做一个映射。
我们把指令里用到的内存地址叫作 虚拟内存地址 (Virtual Memory Address),实际在内存硬件里面的并袭空间地址,我们叫 物理内存地址 (Physical Memory Address)。
程序里有指令和各种内存地址,我们只需要关心虚拟内存地址就行了。对于任何一个程序来说,它看到的都是同样的内存地址。我们维护一个虚拟内存到物理内存的映射表,这样实际程序指令执行的时候,会通过虚拟内存地址,找到对应的物理内存地址,然后执行。因为是连续的内存地址空间,所以我们只需要维护映射关系的起始地址和对应的空间大小就可以了。
内存分段
这种找出一段连续的物理内存和虚拟内存地址进行映射的方法,我们叫分段(Segmentation)。这里的段,就是指系统分配出来的那个连续的内存空间。
分段的办法很好,解决了程序本身不需要关心具体的物理内存地址的问题,但它也有一些不足之处,第一个就是内存碎片(Memory Fragmentation)的问题。
我们来看这样一个例子。我现在手头的这台电脑,有 1GB 的内存。我们先启动一个图形渲染程序,占用了 512MB 的内存,接着启动一个 Chrome 浏览器,占用了 128MB 内存,再启动一个 Python 程序,占用了 256MB 内存。这个时候,我们关掉 Chrome,于是空闲内存还有 1024 - 512 - 256 = 256MB。按理来说,我们有足够的空间再去装载一个200MB 的程序。但是,这 256MB 的内存空间不是连续的,而是被分成了两段 128MB 的内存。因此,实际情况是,我们的程序没办法加载进来。
当然,这个我们也有办法解决。解决的办法叫 内存交换 (Memory Swapping)。
我们可以把 Python 程序占用的那 256MB 内存写到硬盘上,然后再从硬盘上读回来到内存里面。不过读回来的时候,我们不再把它加载到原来的位置,而是紧紧跟在那已经被占用了的 512MB 内存后面。这样,我们就有了连续的 256MB 内存空间,就可以去加载一个新的200MB 的程序。如果你自己安装过 Linux *** 作系统,你应该遇到过分配一个 swap 硬盘分区的问题。这块分出来的磁盘空间,丛蔽裤其实就是专门给 Linux *** 作系统进行内存交换用的。
虚拟内存、分段,再加上内存交换,看起来似乎已经解决了计算机同时装载运行很多个程序的问题。不过,你千万不要大意,这三者的组合仍然会遇到一个性能瓶颈。硬盘的访问速度要比内存慢很多,而每一次内存交换,我们都需要把一大段连续的内存数据写到硬盘上。所以,如果内存交换的时候,交换的是一个很占内存空间的程序,这样整个机器都会显得卡顿。
内存分页
既然问题出在内存碎片和内存交换的空间太大上,那么解决问题的办法就是,少出现一些内存碎片。另外,当需要进行内存交换的时候,让需要交换写入或者从磁盘装载的数据更少一点,这样就可以解决这个问题。这个办法,在现在计算机的内存管理里面,就叫作 内存分页 (Paging)。
和分段这样分配一整段连续的空间给到程序相比,分页是把整个物理内存空间切成一段段固定尺寸的大小 。而对应的程序所需要占用的虚拟内存空间,也会同样切成一段段固定尺寸的大小。这样一个连续并且尺寸固定的内存空间,我们叫页(Page)。从虚拟内存到物理内存的映射,不再是拿整段连续的内存的物理地址,而是按照一个一个页来的。页的尺寸一般远远小于整个程序的大小。在 Linux 下,我们通常只设置成 4KB。你可以通过命令看看你手头的 Linux 系统设置的页的大小。
getconf PAGE_SIZE
由于内存空间都是预先划分好的,也就没有了不能使用的碎片,而只有被释放出来的很多4KB 的页。即使内存空间不够,需要让现有的、正在运行的其他程序,通过内存交换释放出一些内存的页出来,一次性写入磁盘的也只有少数的一个页或者几个页,不会花太多时间,让整个机器被内存交换的过程给卡住。
更进一步地,分页的方式使得我们在加载程序的时候,不再需要一次性都把程序加载到物理内存中。我们完全可以在进行虚拟内存和物理内存的页之间的映射之后,并不真的把页加载到物理内存里,而是只在程序运行中,需要用到对应虚拟内存页里面的指令和数据时,再加载到物理内存里面去。
实际上,我们的 *** 作系统,的确是这么做的。当要读取特定的页,却发现数据并没有加载到物理内存里的时候,就会触发一个来自于 CPU 的 缺页错误 (Page Fault)。我们的 *** 作系统会捕捉到这个错误,然后将对应的页,从存放在硬盘上的虚拟内存里读取出来,加载到物理内存里。这种方式,使得我们可以运行那些远大于我们实际物理内存的程序。同时,这样一来,任何程序都不需要一次性加载完所有指令和数据,只需要加载当前需要用到就行了。
通过虚拟内存、内存交换和内存分页这三个技术的组合,我们最终得到了一个让程序不需要考虑实际的物理内存地址、大小和当前分配空间的解决方案。这些技术和方法,对于我们程序的编写、编译和链接过程都是透明的。这也是我们在计算机的软硬件开发中常用的一种方法,就是 加入一个间接层 。
通过引入虚拟内存、页映射和内存交换,我们的程序本身,就不再需要考虑对应的真实的内存地址、程序加载、内存管理等问题了。任何一个程序,都只需要把内存当成是一块完整而连续的空间来直接使用。
总结延伸
现在回到开头我问你的问题,我们的电脑只要 640K 内存就够了吗?很显然,现在来看,比尔·盖茨的这个判断是不合理的,那为什么他会这么认为呢?因为他也是一个很优秀的程序员啊!
在虚拟内存、内存交换和内存分页这三者结合之下,你会发现,其实要运行一个程序,“必需”的内存是很少的。CPU 只需要执行当前的指令,极限情况下,内存也只需要加载一页就好了。再大的程序,也可以分成一页。每次,只在需要用到对应的数据和指令的时候,从硬盘上交换到内存里面来就好了。以我们现在 4K 内存一页的大小,640K 内存也能放下足足 160 页呢,也无怪乎在比尔·盖茨会说出“640K ought to be enough for anyone”这样的话。
不过呢,硬盘的访问速度比内存慢很多,所以我们现在的计算机,没有个几 G 的内存都不好意思和人打招呼。
那么,除了程序分页装载这种方式之外,我们还有其他优化内存使用的方式么?下一讲,我们就一起来看看“动态装载”,学习一下让两个不同的应用程序,共用一个共享程序库的办法。
手机安装的app怎么安装到sd卡里您好,手机E先生为您解答!
设置,存储,默认存储位置改为外置SD卡,在设置,软件管理可以把已经装在内置存储里的转移到外置SD卡
如果您对我的回答满意望采纳,谢谢!
求问SD卡里的软件安装是安装到sd卡还是安装到手机自带内存手机下载的软件安装后默认存储到话机内存中。部分机器支持将安装的软件移动到SD卡。 *** 作:设置-应用程序-应用程序管理器-打开某个软件-存储-选择已使用的存储空间-更改-选择SD卡。
三星 T959V 怎么把软件安装到SD卡里 安装的软件有的在SD卡里 有的在手机里使用一些软件移动,比如360手机卫士等,可以移动一些软件到SD卡,而有些是不能移动的
你要是想吧所有的软件都移动到SD卡,暴力移动好像行吧
第一,是心理作用
第二,手机运行肯定会产生一些垃圾,以及硬件方面一些原因
所以你会感觉卡了些
安卓2.3系统手机下载的程序是安装到手机卡里还是SD卡里,如果安装到手机卡里,怎么移到SD卡里?打开程序管理就能移至sd卡
若没有你可以用安卓优化森握大师的软件搬家来移动
红米手机怎么把app安装到sd卡上
你好,
不好意思,
MIUI系统从V4开始就不支持软件转移内存卡了,
红米手机怎么把软件安装到sd卡里你可以在手机下载软件的时候,安段春核装时候会提示你安装在哪个位置,你可以选择安装在手机上还是SD卡上,我不知道是不是所有的应用程序安装都是这样的,我一般在应用宝上安装的时候是显示这个的。
三星手机软件怎么安装到SD卡里三星手机将已安装好的软件,移动到外置SD卡(外置存储卡),方法如下:
1.首先在电脑上面下载一个360手机助手,然后安装在电脑上,可以在百度下载。
2.安装好后,打开手机,用USB数据线将手机通过360手机助手与电脑连接。
3.在电脑上面打开360手机助手。
4.打开后,点击【我的手机】。
5.然后再选中【应用管理】。
6.进入【应用管理】页面后,选中【已安装】,然后会出现已经安装的应用程序。
7.这个时候会发现,几乎所有安装的应用程序都安装在手机内存里面,这个时候找到要移动到SD卡的应用程序,点击右边的【移至SD卡】。
8.等待片刻,即可移动成功,移动成功后,会显示【移至内存】。
手机程序怎么安装到sd卡360安全卫士可以软件搬家 移动安装程序 把程序从手机转到卡里
vivox3怎么安装到sd卡里面请问您手机是vivo X3t型号吗?您具体是要握掘将什么安装到SD卡里呢,还请详细的描述一下。vivo X3t手机是不支持SD卡扩展哦,X3t的内存配置为:1G运行内存+16G机身存储空间。
miui8怎么让app安装到sd卡可以在手机上安装360手机卫士或腾讯手机管家,
使用这两个软件可以将软件移动的到SD卡上,
如果还是不能移动,就是手机 *** 作系统不支持。
1. 怎么才能把手机里的文件移到储存卡里我们平时拍的照片和视频是非常占手机内存的,长时间不删除,手机存储装不下了,就会提示内存不够,手机反应变慢,甚至卡死,这个时候我们就需要把手机里的东西移到内存卡里去?那么怎么把手机里下载的东西移到内存卡里去?接下来详细为大家介绍:
1、找到手机主界面里的“文件管理”图标。打开“文件管理”,再打开“内部存储”。
2、在内部存储里面找到要移动的文件(例如,歌曲、电影等)。
3、长按住该文件两秒钟,文件后面就出现一个绿色的标记,表示该文件已经选择了。
4、再点击最下方的“移动”,马上d出一个“请选择要移动的文件夹”
5、此时返回到“文件管理”的界面,打开SD卡基肆游,找到要复制去的文件夹。
6、点击最下方的“移动”搏销,就d出一个文件移动的进度条界面,等进度满100%就表示移好了。
另外,平时还需要注意以下几点:
1、修改手机默认存储位置:方法是点设置——通用——存储,拉到最下方,将“默认存储位置”设置为“外置SD卡”。
2、及时清理APP更新文件:手机上的应用软件经常有更新,下载的更新文件要及时清理。方法是:在手机上打开360手机助手,点右下角的“管理”,再点“下载”,进入下载历史界面,点右上角的“清空记录”,勾选“同时删除本地文件”后确定。
3、要经常用360安全卫士及一键加速对手机进行清理加速。
2. 怎么把手机里下载的东西移到内存卡里去
1、打开手机设置,点击即可进入即可,如下图所示。
2、打开手机应用程序,点击进入就好了,如下图所示。
3、选中并点击要移动的应用,如下图所示。
4、点击移至SD卡,就可以把内容移带内存卡上去了,如下图所示。
5、出现移至内部储存即为成功。
3. 怎么把手机里的东西移到内存卡里
1.如果是照相机拍摄的图片/视频,可提前设置存储路径为SD卡,打开照相机-设置-存储器-内存卡
2.多媒体文件:打开我的文件-所有文件-Device storag-选择需要移动的文件夹-菜单-移动至-extsdcard中
3.自带浏览器(也就是一个“地球”图标)下载选项可修改路径:打开网页后>菜单>设定>内容设置/高级设定>默认存储器>存储卡/设备
4.将软件移动到SD卡的 *** 作方法:设置-应用程序-应用程序管理器-SD卡-随意点开某个应用程序-移动至SD卡。
注:不是所有应用程序均支持移动到SD卡,与软件功能有关。
4. 如何将手机里存的东西转移到内存卡里
一、【手动移动软件】
1, 其实在目前的安卓系统中自带了软件移动功能,我们可以直接使用移动软件,先打开手机的设置功能,在里面找到【应用】这个选项。
2, 打开应用这个功能之后,在里面选择【手机内存储存】然后再里面就可以看到你手机中目前已经安装在内部储存的所有软件了,从中找到你要搬移到SD卡的软件。
3,然后打开一个软件选择后,先把软件选择停止,等软件停止之后,再点击下面的【移至SD卡】,这样你的这个软件程序就会自动进入内存卡中了。
二、【第三方软件搬移】
1,如果你觉得有很多软件,一个个搬移比较麻烦,可以借助第三方软件统一搬移,先打开腾讯手机管家——清理加速——手机瘦身
2, 打开之空间管理功能之后,可以看到软件移动至SD卡这个功能了,先不要急着点击,先点空间扫描,检测一下可以搬移的程序,然后在点击直接搬移就可以了。
5. 怎么把手机里的东西移动到内存卡里
三星note2不支持将软件移动到外置存储卡上。
我们建议您复制多媒体资料文件(照片、音乐、视频、录音、电影等)至外置SD卡中,来有效释放手机内存。
1、打开我的文件-选择需要移动的文件夹-长按住不松手-移动至-外置SD卡中。雹迹
2、如果是照相机/摄像机拍摄的图片/视频,可提前设置存储路径为SD卡,打开照相机/摄像机-设置-存储卡。
3、如果是手机下载文件,建议您在浏览器中更改存储路径:互联网-菜单键-设定-高级设定-默认存储器-存储卡。
6. 您好,请问怎么把文件移到sd卡里
您好:
根据您的描述由于无法确定你手机的具体型号,如果是安卓系统的手机,建议你按如下步骤 *** 作,
一、若要将手机上的多媒体文件(音乐、视频、照片等)存到到外置SD卡里,请按照以下步骤进行 *** 作:
1.在待机界面下,点击【应用程序】图标。
2.点击【文件管理】图标。
3.点击【全部】文件夹。
4.点击【Device storage】,选择需要移动的文件移动到SD卡的文件夹(这里以“DCIM”文件夹中图片为例)。
5.点击【菜单】键,然后选择【选择项目】
6.勾选好需要移动的文件,.点击【菜单】键,选择【移动】。
7.点击外置SD卡【SD memory card】文件夹。
8.选择一个要移动的位置,然后点击【移动到此处】即可。
二、若要将安装的应用程序文件移至到外置SD卡上(具体某个软件能否移动取决于安卓系统的版本和安装软件的本身),如果是安卓4.0-4.1的版本,不支持将安装的软件移动到外置SD卡,如果是安卓4.2及以上的版本,支持将软件安装在外置SD卡上,具体步骤:设定-应用程序管理器-已下载-(选择打开需要移动到外置SD卡上的程序)-SD卡数据-移动到SD卡(具体某个软件能否移动取决于安装软件的本身), 即可!
欢迎访问三星维修预约服务平台:/pre-booking
7. 如何把手机里的东西 移到内存卡
尊敬的三星用户您好:
根据您描述,若将手机中的文件与外置SD卡互相转移,请 *** 作:
1.若是将存储在话机中的多媒体文件移动到SD卡中:我的文件-所有文件-sdcard0-查找需要移动的文件夹-长按住不松手-移动至(若没有此菜单,请点击菜单键-移动)-返回到external_sd-点击"移动到此处"。反之亦然。
2.若您将手机应用程序移动到SD卡中,建议您尝试:
1).若您的手机系统是安卓2.3版本,支持将安装的应用程序移动到外置SD卡。 *** 作:设置-应用程序-管理应用程序-选中某个程序-移至SD卡。
2).若您的手机系统是4.0、4.1版本,应用程序不支持移动到内存卡。
3).若使用的是安卓4.2/4.3/4.4 *** 作系统(包括部分升级到安卓4.3的机型),如需将软件移动到外置SD卡,请您尝试:设定-更多(一般)应用程序管理器-选中某个程序-移动到SD卡(若没有此选项,则不支持该功能)。
注:不是所有的程序均可移至到SD卡,具体根据所下载的软件决定。
如需帮助,请访问support.samsung, 官网将为您提供多渠道服务支持!
8. 怎么把手机里的东西移动到内存卡里
尊敬的三星用户您好:根据您的描述,若您的note2手机已升级到安卓4.3 *** 作系统,请您尝试:设定-更多-应用程序管理器-选中某个程序-移动到SD卡(若没有此选项,则不支持该功能)注:不是所有的程序均可以移动到SD卡,具体根据所下载的软件决定。
您可以将手机内存储的多媒体等文件移动至外置SD卡中:1.多媒体文件:打开我的文件-选择需要移动的文件夹-菜单-移动至-extsdcard中 2.如果是照相机拍摄的图片/视频,可提前设置存储路径为SD卡,打开照相机-设置(小齿轮图标)-存储器-内存卡3.自带浏览器(也就是一个“地球”图标)下载选项可修改路径:浏览器-菜单键-设定-高级设定/内容设置-默认存储器-SD卡/设备(仅是下载存储位置改变,如安装应用程序仍安装于手机内置硬盘中)评价、建议、吐槽,请点击:support.samsung/survey。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)