首页 > 其他 > 详细

如何管理内存?

时间:2019-01-12 18:53:28      阅读:28      评论:0      收藏:0      [点我收藏+]

标签:不能   直接内存   字节   back   的人   删除对象   内存地址   内存管理   人性化   

先从操作系统角度讲:操作系统掌握所有的硬件内存,因为内存很大,所以操作系统把内存分成一个一个的页面(其实就是一个块,一般是4KB) ,然后以页面为单位来管理,页面内用更细小的方式来以字节为单位管理。操作系统内存管理的原理非常麻烦、非常复杂、非常不人性化。那么对我们这些使用操作系统的人来说,其实不需要了解这些细节。操作系统给我们提供了内存管理的一些接口,我们只需要用API即可管理内存。譬如在c语言中使用malloc free这些接口来管理内存。

没有操作系统时在没有操作系统(其实就是裸机程序)中,程序需要直接操作内存,编程者需要自己计算内存的使用和安排。如果编程者不小心把内在用错了,错误结果需要自己承担。

譬如汇编:根本没有任何内存管理,内存管理全靠程序员自己,汇编中操作内存时直接使用内存地址(譬如0xd0020010),非常麻烦;
譬如C语言:c语言中编译器帮我们管理直接内存地址,我们都是通过编译器提供的变量名等来访问内存的,如果需要大块内存,可以通过API (malloc free) 来访问系统内存。
譬如C++语言: C++语 言对内存的使用进步封装。我们可以用new来创建对象 (其实就是为对象分配内存),然后使用完了用delete来删除对象(其实就是释放内存)。所以C++语言对内存的管理比c要高级一一些,容易一些。但是C++中内存的管理还是靠程序员自己来做,如果程序员new了一个对象,但是用完了忘记delete就会造成这个对象占用的内存不能释放,这就是内存泄漏。
再譬如Java/C#等语言:这些语言不直接操作内存,而是通过虚拟机来操作内存。这样虚拟机作为我们程序员的代理,来帮我们处理内存的释放工作。如果我的程序申请了内存,使用完成后忘记释放,则虚拟机会帮我释放掉这些内存。听起来似乎c#/java等语言比/C++有优势,但是其实他这个虚拟机回收内存是需要付出一定代价的,所以说语言没有好坏,只有适应不适应。当我们程序对性能非常在乎的时候(譬如操作系统内核)就会用c/C++语言; 当我们对开发程序的速度非常在乎的时候,就会用Java/C#等语言。
 
 

 

如何管理内存?

标签:不能   直接内存   字节   back   的人   删除对象   内存地址   内存管理   人性化   

原文:https://www.cnblogs.com/sanshijvshi/p/10260552.html

(0)
(0)
   
举报
评论 一句话评论(0
0条  
登录后才能评论!
© 2014 designnerd.net 版权所有 鲁ICP备09046678号-4
打开技术之扣,分享程序人生!
             

鲁公网安备 37021202000002号