`
lesorb
  • 浏览: 123784 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

内存管理之记事

    博客分类:
  • c
阅读更多
内存管理通常有:页式管理和段式管理、段页式管理等等。
1.
页式管理的基本原理将各进程的虚拟空间划分成若干个长度相等的页(page),页式管理把内存空间按页的大小划分成片或者页面(page frame)。
优点: 没有外碎片,每个内碎片不超过页大小
缺点:程序全部装入内存。需要硬件支持。
2.段式管理把程序按内容或过程(函数)关系分成段,每段有自己的名字。
段式管理程序以段为单位分配内存,然后通过地址影射机构把段式虚拟地址转换为实际内存物理地址。通过分段(segmentation)把程序划分为多个模块,如代码段、数据段、共享段。其优点是: 可以分别编写和编译。
3.段页式管理一个进程中所包含的具有独立逻辑功能的程序或数据仍被划分为段,并有各自的段号s。这反映相继承了段式管理的特征。其次,对于段s中的程序或数据,则按照一定的大小将其划分为不同的页。为了实现段页式管理,系统必须为每个作业或进程建立一张段表以管理内存分配与释放、缺段处理、存储保护相地址变换等。
在段页式管理系统中,要对内存中指令或数据进行一次存取的话,至少需要访问三次以上的内存:
第一次是由段表地址寄存器得段表始址后访问段表,由此取出对应段的页表在内存中的地址。
第二次则是访问页表得到所要访问的物理地址。
第三次才能访问真正需要访问的物理单元。
总之,因为段页式管理是段式管理的页式管理方案结合而成的,所以具有它们二者的优点。但反过来说,由于管理软件的增加,复杂性和开销也就随之增加了。另外,需要的硬件以及占用的内存也有所增加。更重要的是,如果不采用联想寄存器的方式提高CPU的访内速度,将会使得执行速度大大下降。
windows的内存管理和linux一样,使用内存必须首先分配,然而windows的严谨在于它将分配的过程分为保留和提交两个阶段。其中保留的含义就是在进程的虚拟地址空间保留一块空间,保留的概念是针对虚拟地址空间的,而提交的含义是将刚才保留的虚拟地址空间的虚拟内存块映射到物理内存,这里windows扩展了物理内存的含义,提交的概念其实就是一个映射。
linux的内存管理是一种绝对的懒惰,访问内存其实就可以被看做内存提交。
windows之所以采用这一种的方式来管理内存其实是为了用一种更加统一的方式去管理所有的内存,只要内存提交了,那么内存管理器就要跟踪这块内存,不管它在物理存储器还是在磁盘页文件。linux的方式看来更加不规范,linux使用页表来充当双面角色,既可以查找物理存储器又可以查找交换分区内存的位置,并且linux中没有一种机制来统一管理物理存储器和交换分区的空间,靠强大的文件系统功能和高效的内存管理和文件管理数据结构就可以轻易做到内存的高效换入换出,解除了物理存储器和交换分区的耦合。


分享到:
评论

相关推荐

    学生管理系统及记事本源代码

    《VC++实现的学生管理系统与记事本源代码解析》 在信息技术领域,源代码是程序设计的核心,它揭示了软件背后的逻辑与结构。本篇将深入探讨由VC++编写的两个项目:学生管理系统和记事本,通过分析这两个项目的源代码...

    c#记事本源程序

    对于大型文本文件,高效的内存管理和文本处理是必要的。C#提供了诸如StringBuilder类这样的工具来减少内存分配和提高文本操作效率。在源码中,查找如何处理大量文本的片段,可以学习到性能优化技巧。 通过学习C#...

    Calendar记事

    本篇文章将深入探讨“Calendar记事”应用的源码,帮助开发者了解其内部机制,尤其是关于日历和事件管理方面的实现细节。我们将从以下几个方面进行详尽的分析: 1. **日历框架概述** 日历应用通常基于特定的日历...

    记事本源代码

    4. **内存管理**:记事本需要在内存中存储用户的文本数据。这涉及到动态内存分配和释放,如C++中的`new`和`delete`,或C#中的`using`语句。 5. **UI设计**:虽然记事本是一个简单的程序,但仍然需要考虑用户体验。...

    闪记云记事 v1.0.0.6 PC版.zip

    神指追求极致,深造精品,全面秉承“永远免费、不盗隐私、不偷流量、不耗内存、不插广告、不作恶”的神指作品宗旨。 闪记云记事主要功能 - 创建笔记、日记、待办事项、提醒 - 支持文字记事、语音记事、图片记事等...

    C#记事本源程序

    最后,学习这个源程序还可以让我们了解C#的资源管理,尤其是内存管理和对象生命周期。在.NET框架下,垃圾回收机制自动处理不再使用的对象,但开发者仍需理解何时创建和释放对象,以避免内存泄漏或过早的释放。 总结...

    基于 Android 平台的记事理财系统

    在Android平台上开发一款记事理财系统,涉及到的技术和知识点相当广泛。这不仅仅是一个简单的应用程序,而是结合了用户界面设计、数据库管理、数据处理以及软件工程的最佳实践。以下是一些核心的开发要点: 1. **...

    记事提醒小软件

    内存管理 软件中使用了`malloc`函数动态分配内存来存储每个事件的结构体实例。`malloc`是C语言中动态内存分配的标准函数,它返回一个指向足够大小内存区域的指针。此外,`free`函数可以用来释放不再需要的内存,...

    易语言桌面便签记事工具

    7. **内存管理和错误处理**:确保程序稳定运行,避免内存泄漏和异常情况。 8. **资源管理**:如图标的加载和显示,可能涉及对图片文件的操作。 总的来说,"易语言桌面便签记事工具"是一个结合了易语言编程基础、GUI...

    记事本源代码-Xiamen University of technology

    1. **基础编程语言**:记事本通常由C或C++编写,这要求读者对这两种语言有基本的了解,包括语法、内存管理以及面向过程的编程思想。 2. **Windows API调用**:记事本的功能实现依赖于Windows操作系统提供的API...

    史上记事本源代码金华

    在这个项目中,我们可以预期源代码将展示出良好的编程实践,包括模块化设计、错误处理、内存管理等方面。 记事本源代码通常采用C、C++或C#等编程语言编写,因为这些语言提供了对底层系统接口的直接访问,可以高效地...

    Windows记事本源代码

    1. **C语言编程基础**:记事本源码主要基于C语言编写,这使得我们能够了解如何使用C语言进行系统级编程,包括内存管理、数据结构和函数调用等。 2. **Windows API调用**:Windows应用程序通常通过调用操作系统提供...

    java记事本源代码

    - **内存管理**:由于Java的自动内存管理,开发者需要注意避免内存泄漏,尤其是当处理大量文本时。 - **线程安全**:如果记事本支持多窗口或者并发操作,那么需要考虑线程安全问题,防止数据冲突。 通过研究这个...

    android下的简单记事本源程序

    总结,"android下的简单记事本源程序"是一个典型的Android入门项目,涵盖了Android开发的基础知识,如Activity管理、数据存储、用户界面设计、事件处理等。通过这个项目,开发者可以深入理解Android应用的运行机制,...

    用VC++6.0写的记事本源代码

    总之,用VC++6.0实现的记事本源代码是一个很好的学习平台,可以帮助开发者熟悉Windows编程的基本原理,掌握MFC框架的应用,以及理解C++中面向对象编程的概念。通过分析和修改这个源代码,我们可以提升自己的编程技能...

    c语言自由记事薄

    此外,`link003`项目还可能涉及到了其他C语言特性,比如错误处理(使用`errno`和`perror`)、内存管理(`malloc`, `calloc`, `free`)以及条件判断和循环控制等。这些基础但关键的知识点是每一位C程序员必须熟练掌握...

    java小程序(日历记事等功能)

    数据结构如链表或数组可以用来在内存中存储记事条目。对于用户界面,Java Swing或JavaFX库可以用来构建图形用户界面(GUI),包括文本框、按钮、列表视图等组件,使用户能够输入、查看和编辑记事。 在课程设计中,...

    记事本源代码好用的,测试过可以

    3. **内存管理**:如何动态分配和释放内存,防止内存泄漏。 4. **用户界面**:了解如何创建窗口、添加控件、响应用户输入事件。 5. **多线程编程**:如果记事本支持多文档或同时编辑多个文件,可能会涉及到线程同步...

    用C语言编写的Windows简易记事本源代码

    4. **内存管理**:了解动态内存分配(如malloc和free)在程序中的应用,特别是在处理大文本时。 5. **字符串处理**:掌握字符串函数,如strcpy、strcat、strlen等,用于文本编辑和保存。 6. **GUI编程**:学习如何...

Global site tag (gtag.js) - Google Analytics