站长百科 | 数字化技能提升教程 数字化时代生存宝典
首页
数字化百科
电子书
建站程序
开发
服务器
办公软件
开发教程
服务器教程
软件使用教程
运营教程
热门电子书
WordPress教程
宝塔面板教程
CSS教程
Shopify教程
导航
程序频道
推广频道
网赚频道
人物频道
网站程序
网页制作
云计算
服务器
CMS
论坛
网店
虚拟主机
cPanel
网址导航
WIKI使用导航
WIKI首页
最新资讯
网站程序
站长人物
页面分类
使用帮助
编辑测试
创建条目
网站地图
站长百科导航
站长百科
主机侦探
IDCtalk云说
跨境电商导航
WordPress啦
站长专题
网站推广
网站程序
网站赚钱
虚拟主机
cPanel
网址导航专题
云计算
微博营销
虚拟主机管理系统
开放平台
WIKI程序与应用
美国十大主机
编辑“
内存管理
”
人物百科
|
营销百科
|
网赚百科
|
站长工具
|
网站程序
|
域名主机
|
互联网公司
|
分类索引
跳转至:
导航
、
搜索
警告:
您没有登录。如果您做出任意编辑,您的IP地址将会公开可见。如果您
登录
或
创建
一个账户,您的编辑将归属于您的用户名,且将享受其他好处。
反垃圾检查。
不要
加入这个!
'''内存管理''',即是指[[软件]]运行时对计算机[[内存]]资源的分配和使用的技术。其最主要的目的是如何高效,快速的分配,并且在适当的时候释放和回收[[内存]]资源。一个执行中的程式,譬如网页浏览器在个人电脑或是图灵机(Turing machine)里面,为一个行程将资料转换于真实世界及电脑内存之间,然后将资料存于电脑内存内部(在计算机科学,一个程式是一群[[指令]]的集合,一个行程是电脑在执行中的程式)。 ==相关简介== *我们知道,一个有用简单的发展在[[虚拟内存]]内,一个程序([[操作系统]]),持续的追踪实体位置再每一个资料区段,及移动资料在实体位置去改善效能及保证可靠性,对于每个用户层(user-level)的程式,[[操作系统]]分配一段虚拟内存空间,当行程起始时,不需要移动资料到实体装置间,资料存于[[磁盘]]内的虚拟内存空间,也不需要去配置主内存空间给该行程,他们是很自由的当使用者有需要用到时才会加载到主内存内。 *内存管理对于编写出高效率的[[Windows]]程序是非常重要的,这是因为[[Windows]]是多任务系统,它的内存管理和单任务的[[DOS]]相比有很大的差异。DOS是单任务[[操作系统]],应用程序分配到内存后,如果它不主动释放,系统是不会对它作任何改变的;但[[Windows]]却不然,它在同一时刻可能有多个应用程序共享内存,有时为了使某个任务更好地执行,Windows系统可能会对其它任务分配的内存进行移动,甚至删除。因此,我们在Windows应用程序中使用内存时,要遵循Windows内存管理的一些约定,以尽量提高Windows内存的利用率。 ==内存对象== *Windows应用程序可以申请分配属于自己的内存块,内存块是应用程序操作内存的单位,它也称作内存对象,在[[Windows]]中通过内存句柄来操作内存对象。内存对象根据分配的范围可分为全局内存对象和局部内存对象;根据性质可分为固定内存对象,可移动内存对象和可删除内存对象。 *固定内存对象,特别是局部固定内存对象和[[DOS]]的内存块很类似,它一旦分配,就不会被移动或删除,除非应用[[程序]]主动释放它。并且对于局部固定内存对象来说,它的内存句柄本身就是内存对象的16位近地址,可供应用程序直接存取,而不必象其它类型的内存对象那样要通过锁定在内存某固定地址后才能使用。 *可移动内存对象没有固定的地址,[[Windows]]系统可以随时把它们移到一个新地址。内存对象的可移动使得Windows能有效地利用自由内存。例如,如果一个可移动的内存对象分开了两个自由内存对象,Windows可以把可移动内存对象移走,将两个自由内存对象合并为一个大的自由内存对象,实现内存的合并与碎片回收。 *可移动内存对象和可删除内存对象在存取前必须使用内存[[加锁]]函数将其锁定,锁定了的内存对象不能被移动和删除。因此,应用程序在使用完内存对象后要尽可能快地为内存对象[[解锁]]。内存需要加锁和解锁增加了程序员的负担,但是它却极大地改善了Windows内存利用的效率,因此Windows鼓励使用可移动和可删除的内存对象,并且要求应用程序在非必要时不要使用固定内存对象。 ===局部内存=== 局部内存对象在局部堆中分配,局部堆是应用程序独享的自由内存,它只能由应用程序的特定实例访问。局部堆建立在应用程序的[[数据段]]中,因此,用户可分配的局部内存对象的最大内存空间不能超过64K。局部堆由Windows应用程序在模块定义文件中用[[HEAPSIZE]]语句申请,HEAPSIZE指定以字节为单位的局部堆初始空间尺寸。Windows提供了一系列函数来操作局部内存对象。 *分配局部内存对象 *加锁与解锁 *改变局部内存对象 *释放与删除 ===全局内存=== 全局内存对象在全局堆中分配,全局堆包括所有的系统内存。一般来说,[[应用程序]]在全局堆中进行大型内存分配(约大于1KB),在全局堆还可以分配大于64K的巨型内存。 *分配全局内存对象 *加锁与解锁 *修改全局内存对象 *内存释放及其它操作 *巨型内存对象 ==段介绍== Windows采用段的概念来管理应用程序的内存,段有[[代码]]段和数据段两种,一个应用程序可有多个代码段和数据段。代码段和数据段的数量决定了应用程序的内存模式,段的管理和全局内存对象的管理很类似,段可以是固定的,可移动的和可删除的,其属性在应用程序的模块定义文件中指定。段在全局内存中分配空间,[[Windows]]鼓励使用可移动的代码段和数据段,这样可以提高其内存利用效率。 *代码段 代码段是不超过64K字节的机器[[指令]],它代表全部或部分应用程序指令。代码段中的数据是只读的,对代码段执行写操作将引起通用保护(GP)错误,每个应用程序都至少有一个代码段,用户也可以生成有多个代码段的应用。实际上,多数Windows应用程序都有多个代码段。通过使用多代码段,用户可以把任何给定代码段的大小减少到完成某些任务所必须的几条指令。这样,可通过使某些段可删除,来优化应用程序对内存的使用。 *数据段 每个应用程序都有一个数据段,数据段包含应用程序的[[堆栈]]、局部堆、静态数据和全局数据。一个数据段的长度也不能超过64K。数据段可以是固定的或可移动的,但不能是可删除的。如果数据段是可移动的,Windows在将控制转向应用程序前自动为其加锁,当应用程序分配全局内存,或试图在局部堆中分配超过当前可分的内存时,可移动数据段可能被移动,因此在数据段中不要保留指向变量的长[[指针]],当数据段移动时,此长指针将失效。 ==相关条目== *[[文件管理]] *[[进程管理]] ==参考资料== *http://en.wikipedia.org/wiki/Memory_management [[category:CPU]] [[category:操作系统|C]]
摘要:
请注意,您对站长百科的所有贡献都可能被其他贡献者编辑,修改或删除。如果您不希望您的文字被任意修改和再散布,请不要提交。
您同时也要向我们保证您所提交的内容是您自己所作,或得自一个不受版权保护或相似自由的来源(参阅
Wordpress-mediawiki:版权
的细节)。
未经许可,请勿提交受版权保护的作品!
取消
编辑帮助
(在新窗口中打开)