`

C和C++ 语言动态内存分配

 
阅读更多

原文:http://www.cnblogs.com/zhj202190/archive/2011/05/11/2043620.html

一、C语言动态内存分配

    要实现动态内存的分配,除了利用含指针成员的结构体之外,还需利用C语言提供的几个标准库函数。(使用时应包含头文件“alloc.h”或“malloc.h”或“stdlib.h”)

    1.malloc函数

  函数原型为void *malloc(unsigned int size);在内存的动态存储区中分配一块长度为"size" 字节的连续区域。函数的返回值为该区域的首地址。 “类型说明符”表示把该区域用于何种数据类型。(类型说明符*)表示把返回值强制转换为该类型指针。“size”是一个无符号数。例如: pc=(char *) malloc (100); 表示分配100个字节的内存空间,并强制转换为字符数组类型,函数的返回值为指向该字符数组的指针, 把该指针赋予指针变量pc。若size超出可用空间,则返回空指针值NULL。

    2.calloc 函数

    函数原型为void *calloc(unsigned int num, unsigned int size)

  按所给数据个数和每个数据所占字节数开辟存储空间。其中num为数据个数,size为每个数据所占字节数,故开辟的总字节数为num*size。函数返回该存储区的起始地址。calloc函数与malloc 函数的区别仅在于一次可以分配n块区域。例如: ps=(struct stu*) calloc(2,sizeof (struct stu)); 其中的sizeof(struct stu)是求stu的结构长度。因此该语句的意思是:按stu的长度分配2块连续区域,强制转换为stu类型,并把其首地址赋予指针变量ps。

    3. realloc函数:

  函数原型为void *realloc(void *ptr, unsigned int size)

      重新定义所开辟内存空间的大小。其中ptr所指的内存空间是用前述函数已开辟的,size为新的空间大小,其值可比原来大或小。函数返回新存储区的起始地址(该地址可能与以前的地址不同)。例如p1=(float *)realloc(p1,16);将原先开辟的8个字节调整为16个字节。

 **动态申请的内存空间要进行手动用free()函数释放

    4. free函数:

  函数原型为void free(void *ptr)

  将以前开辟的某内存空间释放。函数原型为 void free(void *ptr)其中ptr为存放待释放空间起始地址的指针变量,函数无返回值。应注意:ptr所指向的空间必须是前述函数所开辟的。例如free((void *)p1);将上例开辟的16个字节释放。可简写为free(p1);由系统自动进行类型转换。

二、C++语言动态内存分配

  C++语言中用new和delete来动态申请和释放内存。

    1. 申请单个对象

  int *p;

  p=new int;或者 p=new int(value);

  2. 动态申请数组

  int *p;

  p=new int [100];

  这样可以申请长度为100的数组,但是不能进行初始化。

 3. delete

  int *p, *q;

  p=new int;

  q=new int[10];

  delete p;

  delete [ ]q;

分享到:
评论

相关推荐

    C和C++语言的内存分配详解

    C和C++语言的内存分配详解

    用c 语言分别实现采用首次适应算法和最佳适应算法的动态分区分配过程alloc()和回收过程free()

    用c 语言分别实现采用首次适应算法和最佳适应算法的动态分区分配过程alloc()和回收过程free(),其中,空闲分区通过空闲分区链来管理;在进行内存分配时,系统优先使用空闲区低端的空间。。。。 假设初始状态下,可用...

    实验四__动态分区分配方式的模拟_答案

    用C语言或C++语言分别实现采用首次适应算法和最佳适应算法的动态分区分配过程alloc()和回收过程free()。其中,空闲分区通过空闲分区链表来管理,在进行内存分配时,系统优先使用空闲区低端空间。

    操作系统课程设计——一动态分区分配方式的模拟

    要求:用C语言或C++语言分别实现采用首次适应算法和最佳适应算法的动态分区分配过程alloc()和回收过程free()。其中,空闲分区通过空闲分区链表来管理,在进行内存分配时,系统优先使用空闲区低端的空间。 假设初始...

    C/C++-内存分配算法-操作系统课程设计-首次适应算法-循环首次适应算法-最佳适应算法-最坏适应算法

    用C语言实现动态分区分配过程alloc()和回收过程free()。其中,空闲分区通过空闲分区链表来管理,分别采用首次适应算法、循环首次适应算法、最佳适应算法、最坏适应算法进行内存块的分配和回收,同时显示内存块分配和...

    刘振安-面向对象程序设计 C++

    C语言是结构化程序设计语言,它的程序设计特点就是函数设计。同样,C++语言的类也离不开函数。...最后介绍C++语言的动态内存分配、引用、指针使用const、范型算法用于普通数组及数据的简单输出输入格式。

    用C++语言实现首次适应算法

    用C++语言实现操作系统中关于动态空闲空间的分配与回收,用首次适应算法实现。简单的小程序,只用结构体和数组实现。适用于初学者。

    Malloc和new区别

    3 ,因此C++ 语言需要一个能完成动态内存分配和初始化工作的运算符new ,以一个能完成清理与释放内存工作的运算符delete.注意ne w/delete 不是库函数。 4 ,C++ 程序经常要调用C函数,而C 程序只能用malloc/free ...

    可变分区存的内存分配与回收

    掌握可变分区存储管理方式的内存分配过程、内存回收过程和紧凑算法的实现过程。 C/C++语言编译器

    C 语言实现的内存池 mpool.c : 适用于Windows和Linux

    当C/C++程序频繁分配内存,或者管理很多大块内存的时候,我们就需要一个简洁高效的内存池(memory pool)。很多语言提供了这个基础设施,这里我提供一个C语言的版本mpool.c:原始的mpool仅仅提供Unix/Linux的版本,...

    浅析C_C++程序运行过程中的动态存储管理

    动态存储管理是计算机中作业在执行前不直接建立分区,而是在作业执行过程中建立的。所建分区的大小可随作业或进程对内存的...本文将以C/C++语言为对象,对其在运行、实现、动态调整策略等方面和内容做以简单的介绍。

    C++教材(张松)c++语言是从C语言发展而来,她在重突出的面向对象的的特性的同时,出于工程实际的需求,也作了一些关于非面向对象的语言规则。

    熟悉变量的引用是不需要分配内存空间的 熟练运用使用cin,cout,处理输入和输出 熟练运用简单数据类型的const用法 熟练运用简单变量的引用 熟练运用函数的默认参数设定 熟练运用函数的重载

    Go语言的内存模型及堆的分配管理

    Go这门语言抛弃了C/C++中的开发者管理内存的方式,实现了主动申请与主动释放管理,增加了逃逸分析和GC,将开发者从内存管理中释放出来,让开发者有更多的精力去关注软件设计,而不是底层的内存问题。这是Go语言成为...

    操作系统请求分页存储器管理C++代码实现

    2.能够模拟内存的分页式分配和回收过程,可查看内存分配位示图和进程页表; 3.可根据内存分配状态进行地址转换。 4.能够模拟基于虚拟存储器的内存分配和回收过程,可查看交换空间位示图和扩 展的页表; 5.在虚拟...

    对C语言和C++内存的理解

    在C语言和C++开发中,指针、内存一直是学习的重点。因为C语言作为一种偏底层的中低级语言,提供了大量的内存直接操作的方法,这一方面使程序的灵活度大化,同时也为bug埋下很多隐患。  因此,无论如何,我们都要...

    python内存动态分配过程详解

    其他语言,想C++和java,允许“随时随地”声明变量,比如,变量声明可以在代码块的中间,不过仍然必须在变量被使用前声明变量的名字和类型。 在Python中,无序此类显式变量声明语句,变量在第一次被赋值时自动声明。...

    嵌入式设备的内存分配器

    基于嵌入式设备的内存分配器实现,使用C/C++语言进行设计。

    C++基础教程完整版

    4. 动态内存分配 Dynamic memory 5. 数据结构 Data Structures 6. 自定义数据类型 User defined data types 5. 面向对象编程 Object-oriented Programming 1. 类,构造函数和析构函数,类的指针 Classes. ...

    C/C++语言中结构体的内存分配小例子

    当未用 #pragma 指令指定编译器的对齐位数时,结构体按最长宽度的数据成员的宽度对齐;当使用了 #pragma 指令指定编译器的对齐位数时,结构体按最长宽度的数据成员的宽度和 #pragma 指令指定的位数中的较小值对齐

    c++语言程序设计(第三版)

    6.3 动态内存分配 6.4 字符串 6.5 小结 习题 第7章 继承与派生 7.1 继承与派生 7.2 访问控制 7.3 派生类的构造和析构函数 7.4 派生类成员的标识与访问 7.5 赋值兼容规则 7.6程序实例——用高斯消去法解线性方程组 ...

Global site tag (gtag.js) - Google Analytics