`

动态内存分配和撤销方式剖析

 
阅读更多

动态内存分配和撤销方式剖析

在C语言中是利用库函数malloc和free来分配和撤销内存空间的。C++提供了运算符new和delete来取代malloc和free函数。注意:new和delete是运算符,不是函数,因此执行效率高。虽然与C语言兼容,C++仍保留malloc和free函数,建议使用new和delete运算符,不要用malloc和free函数。

New运算符一般格式:new 类型 [初值]

用new分配数组空间时不能指定初值。如果由于内存不足等原因无法正常分配空间,则new会返回一个空指针NULL,可以根据该指针的值判断分配空间是否成功。

Delete运算符一般格式:

Delete[ ] 指针变量

例如:开辟空间存放一个结构体变量:

/*

 *test3.cpp

 *

 * Created on: 2012-4-10

 *     Author: David

 */

 

#include<iostream>

#include<string>

usingnamespace std;

 

struct Student

{

  stringname;

  int num;

  char sex;

};

int main()

{

  Student*p;    //定义指定结构体类型Student的数据的指针变量

  p=new Student; //new运算符开辟一个存放Student型数据的空间

  p->name="David";//向结构体变量的成员赋值

  p->num=12345;  

  p->sex="m";

  cout<<p->name<<endl<<p->num<<endl<<p->sex<<endl;//输出各个参数

  delete p;   //撤销该空间

  return 0;

}

    在上面的代码中,我们并没有定义结构体变量,而是定义了一个基类型为Student的指针变量p,用new开辟一段空间用来存放Student类型的变量p。空间的大小由系统根据Student结构体大小自动算出,无需指定。执行new得到一个指向Student类型数据的指针值即起始地址,把这个起始地址赋给p。我们可以通过p来访问该空间,并对该空间内的成员赋值操作。用delete撤销该空间。

在动态分配/撤销空间时,通常将这两个运算符和结构体结合使用。要访问用new开辟的结构体空间,无法直接通过变量名进行,只能通过指针p进行访问。

如果要建立一个动态链表,必须从第一个结点开始,逐个开辟结点并输入各结点数据,通过指针建立起前后相链的关系。

分享到:
评论

相关推荐

    操作系统 内存的分配与回收 实验报告

    3. 不同算法的内存分配:实验中使用了首次适应算法和最佳适应算法进行内存分配。 四.实验步骤: 1. 原始分配:根据需求,依次分配40k、30k、50k、20k、40k、40k的内存空间。 2. 内存回收:撤销进程0和2,释放对应...

    最先适应算法实现主存分配回收

    通过这样的方式,可以实现对内存空间的有效管理,模拟真实操作系统中的内存分配过程。 在实际的系统中,最先适应算法虽然简单,但可能会导致内存碎片问题,因为总是优先使用最小的空闲分区,长期下来可能导致大量小...

    段式管理的分配和回收

    2. **系统架构**:描述段式管理的实现结构,包括段表的设计、内存分配算法的选择等。 3. **实现细节**:详细说明分配和回收的算法实现,包括伪代码或实际代码。 4. **性能分析**:通过实验数据评估分配和回收的...

    首次适应方法管理内存~~操作系统作业

    在实际的操作系统中,内存管理还包括更复杂的机制,如动态内存分配、内存保护、交换等。例如,Windows使用了分页技术,将物理内存和虚拟内存相结合,以实现更大的可用内存空间。分页系统会根据需求将进程的部分映射...

    操作系统主存分配C++程序

    操作系统主存分配是计算机科学中的一个关键概念,它涉及到如何有效地在内存中为多个进程或程序分配空间,以便实现...通过学习和分析这个程序,我们可以提升对操作系统内存分配策略、进程管理以及内存分配算法的理解。

    操作系统实验——模拟进程的创建与撤销

    撤销进程则涉及清理分配的资源,释放内存空间,更新PCB状态,并处理与该进程相关的其他信息。这一过程通常发生在进程完成其生命周期、被阻塞或者被父进程请求终止时。 在C++中实现这个过程,我们可以使用类来表示...

    操作系统课程设计-分页式内存管理:源代码+实验报告

    3. **实验要求**: 至少实现上述一种分配方式,设定内存大小和页大小,随机分配初始内存状态,创建作业队列,输出详细结果,编写清晰的程序代码并撰写实验报告。 实验报告应当分析实验结果,比较连续分配和分页管理...

    进程 创建 撤销 控制

    首先,通过 `malloc()` 分配内存,然后读取进程名、运行时间和优先级。 - **排序**:`sort()` 函数根据进程的优先级对进程进行排序。如果新进程的优先级高于当前链表中的任何进程,则将其插入到相应位置。 - **打印*...

    操作系统课程设计-模拟操作系统需求分析文档

    存储管理负责内存分配和地址转换;设备管理涉及I/O设备的高效利用;进程管理则关注进程的生命周期和并发控制。 **系统功能需求描述**: 文件管理和用户接口的需求强调了在多用户环境中安全、一致地管理文件的重要性...

    10,12,13年广工操作系统试卷

    在试卷中,可能会有涉及内存分配策略和页面失效的计算题。 3. 文件系统:文件系统是管理和组织磁盘上的数据结构,包括文件的创建、删除、读写操作,以及目录结构的实现。可能的考点有文件的逻辑结构、物理结构、...

    Linux操作系统内核分析与研究1

    未来的研究方向可能集中在内核优化和理论创新,例如提高调度算法的效率、优化内存分配策略、增强文件系统的安全性等。 关键词:Linux操作系统,内核分析,进程调度,存储管理,VFS虚拟文件系统。

    操作系统课程设计.pdf

    【操作系统课程设计】是针对计算机科学和技术专业学生的一项实践性教学环节,旨在深入理解操作系统的概念和机制...这不仅锻炼了编程能力,也提高了分析和解决问题的能力,对于将来从事系统开发和维护工作具有重要意义。

    操作系统 原理和实例分析

    内存管理则关注如何有效地分配和回收内存,避免碎片并提高内存利用率;文件系统是组织和管理磁盘上数据的逻辑结构,它包括文件的创建、删除、读写以及权限管理等;设备管理处理输入/输出设备的控制,如中断处理和I/O...

    操作系统学位大纲进程管理、处理机调度、内存管理、文件管理、I/O设备管理、页式管理

    3. **内存管理**:内存管理的目标是有效地分配和回收内存,防止内存碎片,并实现虚拟内存。页式、段式和段页式管理是常见的内存管理策略,其中页式管理通过页表进行地址转换,段式管理按逻辑单元分配内存,段页式...

    全局变量、局部变量、静态变量即内存管理

    首先,我们来看一下程序的内存分配。一个由 C/C++ 编译的程序占用的内存分为以下几个部分: 1. 栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2. 堆...

    操作系统模拟实验

    3. **内存碎片**:内部碎片和外部碎片,以及如何通过紧凑和动态内存分配减少碎片。 4. **内存分配与回收**:分配算法如首次适配、最佳适配、最差适配,以及内存回收策略。 5. **内存保护**:防止进程间非法访问,如...

    考研计算机

    内存分配涉及物理内存和逻辑内存的概念,以及内存的地址映射和重定位。地址重定位包括静态地址重定位和动态地址重定位两种方式,它们各有优缺点。虚拟存储器是现代操作系统的关键技术之一,它能够从逻辑上扩展实际...

    毕业设计(论文)--基于c语言的小型模拟操作系统设计.doc

    进程的创建和撤销主要应用指针和链表的知识,进程的运行方式采用的是时间片轮转调度算法,通过输入相关指令可以看到多个进程在时间片调度算法下由就绪态到运行态再到完成态的全过程。 存储管理部分主要实现了进程...

    PCB.rar_银行家算法

    通过阅读和分析这些代码,我们可以更直观地理解算法的每个阶段如何在实际系统中运作,包括资源的动态分配、进程状态的维护以及安全性检查等。这对于学习操作系统和提高编程能力大有裨益。 总结,操作系统中的进程...

Global site tag (gtag.js) - Google Analytics