当前位置:首页 » 服务器技术
开发技术指南» 文章正文
    引言: 追溯到在 Apple II 上进行汇编语言编程的时代,那时内存管理还不是个大问题。
 

 

 ·gcc安装手册(1)    »显示摘要«
    摘要:这是一份在unix系统上安装gnu cc的程序,vms系统的使用者请看*注解:vms 安装。在这一节中,我们假设编译的动作是在和原始档案相同的目录下执行;如果希望在其他目录下执行编译动作,请看 *注解:其他目录。 在ms-dos下直接安装 gnu cc 是不可行的,使用 dos 下的任何编译器皆无法成功的编译 gnu cc,除非你使用 gnu cc 本身。欲在 ms-dos 下安装 gnu cc,......
 ·c++代码优化方法总结(1)    »显示摘要«
    摘要:优化是一个非常大的主题,本文并不是去深入探讨性能分析理论,算法的效率,况且我也没有这个能力。我只是想把一些可以简单的应用到你的c++代码中的优化技术总结在这里,这样,当你遇到几种不同的编程策略的时候,就可以对每种策略的性能进行一个大概的估计。这也是本文的目的之所在。一. 优化之前在进行优化之前,我们首先应该做的是发现我们代码的瓶颈(bottleneck)在哪里。然而当你做这件事情的时候切忌从一个d......


内存管理内幕(1)

追溯到在 apple ii 上进行汇编语言编程的时代,那时内存管理还不是个大问题.您实际上在运行整个系统.系统有多少内存,您就有多少内存.您甚至不必费心思去弄明白它有多少内存,因为每一台机器的内存数量都相同.所以,如果内存需要非常固定,那么您只需要选择一个内存范围并使用它即可.

确定您是否有足够的内存来处理数据. 从可用的内存中获取一部分内存. 向可用内存池(pool)中返回部分内存,以使其可以由程序的其他部分或者其他程序使用.

【程序编程相关:怎样挑选企业存储资源管理工具?

不过,即使是在这样一个简单的计算机中,您也会有问题,尤其是当您不知道程序的每个部分将需要多少内存时.如果您的空间有限,而内存需求是变化的,那么您需要一些方法来满足这些需求: 【推荐阅读:请教Buffer Credits的调节办

c 风格的内存分配程序 【扩展信息:寻找类似于SANScan的管理软件

实现这些需求的程序库称为 分配程序(allocators),因为它们负责分配与回收内存.程序的动态性越强,内存管理就越重要,您的内存分配程序的选择也就更重要.让我们来了解可用于内存管理的不同方法,它们的好处与不足,以及它们最适用的情形.

c 编程语言提供了两个函数来满足我们的三个需求:

malloc:该函数分配给定的字节数,并返回一个指向它们的指针.如果没有足够的可用内存,那么它返回一个空指针. free:该函数获得指向由 malloc 分配的内存片段的指针,并将其释放,以便以后的程序或操作系统使用(实际上,一些 malloc 实现只能将内存归还给程序,而无法将内存归还给操作系统).

物理内存与虚拟内存

要理解内存在程序中是如何分配的,首先需要理解如何将内存从操作系统分配给程序.计算机上的每一个进程都认为自己可以访问所有的物理内存.显然,由于同时在运行多个程序,所以每个进程不可能拥有全部内存.实际上,这些进程使用的是 虚拟内存.

只是作为一个例子,让我们假定您的程序正在访问地址为 629 的内存.不过,虚拟内存系统不需要将其存储在位置为 629 的 ram 中.实际上,它甚至可以不在 ram 中 —— 如果物理 ram 已经满了,它甚至可能已经被转移到硬盘上!由于这类地址不必反映内存所在的物理位置,所以它们被称为虚拟内存.操作系统维持着一个虚拟地址到物理地址的转换的表,以便计算机硬件可以正确地响应地址请求.并且,如果地址在硬盘上而不是在 ram 中,那么操作系统将暂时停止您的进程,将其他内存转存到硬盘中,从硬盘上加载被请求的内存,然后再重新启动您的进程.这样,每个进程都获得了自己可以使用的地址空间,可以访问比您物理上安装的内存更多的内存.

在 32-位 x86 系统上,每一个进程可以访问 4 gb 内存.现在,大部分人的系统上并没有 4 gb 内存,即使您将 swap 也算上, 每个进程所使用的内存也肯定少于 4 gb.因此,当加载一个进程时,它会得到一个取决于某个称为 系统中断点(system break)的特定地址的初始内存分配.该地址之后是未被映射的内存 —— 用于在 ram 或者硬盘中没有分配相应物理位置的内存.
...   下一页

 ·python 中的文本处理(1)    »显示摘要«
    摘要:python 是由 guido van rossum 开发的、可免费获得的、非常高级的解释型语言。其语法简单易懂,而其面向对象的语义功能强大(但又灵活)。python 可以广泛使用并具有高度的可移植性。 字符串 -- 不可改变的序列如同大多数高级编程语言一样,变长字符串是 python 中的基本类型。python 在“后台”分配内存以保存字符串(或其它值),程序员不必为此操心。python 还有......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE