查了查资料,总结了以下几点: 

一、先来谈谈在C语言下,动态内存分配和释放的特点。

动态分配内存的定义是这样的,指在程序运行过程中,要申请内存,系统会根据程序的实际情况来分配,分配空间的大小是由程序的需求来决定的。在C语言下面,举个例子,定义一个指针,int *p;此时指针i是一个野指针,是一个指向不确定位置的指针,对它进行操作是很危险的,此时我们需要动态分配内存空间,让i指向它。而有一种形式是这样的,int *p=&b;这并非是一种动态内存分配方式,而是一种指针的初始化,把变量b的首地址给了指针p。在C语言下究竟如何实现动态内存分配的呢?这里提供了几个函数来实现,分别是malloc(),calloc(),realloc(),而释放内存的函数为free(),分别探讨他们的异同。

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;

1 new 是个操作符
malloc是个分配内存的函数,供你调用的.
2
new 建立的是一个对象,会调用构造函数。 malloc分配的是一块内存. 3 new建立的对象你可以把它当成一个普通的对象,用成员函数访问,不要直接访问它的地址空间 malloc分配的是一块内存区域,就用指针访问好了,而且还可以在里面移动指针.

参考资源来源:http://www.cnblogs.com/zhj202190/archive/2011/05/11/2043620.html

http://apps.hi.baidu.com/share/detail/57234849

转载于:https://www.cnblogs.com/liujin2012/archive/2012/10/16/2726075.html

c与c++分别是怎样动态分配和释放内存的,有什么区别?(转)相关推荐

  1. 内存动态分配与释放,malloc和new区别

    1.   C语言的函数malloc和free (1) 函数malloc和free在头文件<stdlib.h>中的原型及参数 void * malloc(size_t size) 动态配置内 ...

  2. C++ new和delete(C++动态分配和释放内存)

    当我们需要为类对象动态分配存储空间时,我们应该使用 C++语言提供的 new 与 new[] 操作符,而不要使用 C语言提供的 malloc() 函数. 虽然 malloc() 函数具有分配存储空间的 ...

  3. php的内存划分,解析PHP中的内存管理,PHP动态分配和释放内存

    摘要 内存管理对于长期运行的程序,例如服务器守护程序,是相当重要的影响:因此,理解PHP是如何分配与释放内存的对于创建这类程序极为重要.本文将重点探讨PHP的内存管理问题. 一. 内存 在PHP中,填 ...

  4. C语言内存动态分配与释放

    一.内存分配 对于内存的分配,主要采用的是标记法. 分配方法有两种,一种是静态分配,也就是在程序编译的时候,就完成了对内存的分配.例如当一个数组在声明时,指定长度之后,它所需要的内存在编译时就会被分配 ...

  5. 计算机及网络系统联调和试运行,别再傻傻分不清试运行、试运营和正式运营的区别了!...

    原标题:别再傻傻分不清试运行.试运营和正式运营的区别了! 随着轨道交通线路的不断建设与发展,不同线路试运行.试运营诸如此类字眼不断进入大众眼球.除一些在相关行业工作的小伙伴们比较清楚试运行.试运营以及 ...

  6. 存储空间的动态分配与释放

    1,关于malloc()函数 函数调用的一般形式: (类型标识符*)malloc(size) malloc()函数的功能是在内存动态分配一个长度为size的一个连续空间,含数返回值是该区域的首地址. ...

  7. html5测试苹果8p多少分,苹果8p美版和国行有什么区别

    苹果8p美版和国行的不同之处包含:手机型号不一样.输入法不一样.低电量提示不一样.价格不一样.保修政策不一样.支持运营网络不一样.其中最大的不同是价格与保修,一般美版8p要比国行便宜,但在国内保修没有 ...

  8. 坐了怎么久,傻傻分不清动车和高铁,有哪些区别呢?

    生活水平的提高,相对于火车出行,更多人会选择乘坐高铁.动车,耗时短而且环境也比较好,相对于飞机价格更能够让人接受. 这里就有一个疑问?做了这么久的车,是高铁还是动车你知道嘛?两者具体有什么区别呢?你知 ...

  9. linux socket 面试题,面试题

    1.网络TCP/IP协议 2.三层路由架构,搭建局域网 3.自动化测试工具robotframework的使用,怎么管理测试脚本 4.shell脚本可用过?怎么替换一个文本中指定的内容? 5.pytho ...

最新文章

  1. 【HDU】1284 钱币兑换问题 (想一想)
  2. 使用 XML 时尽量避免使用的技术
  3. pycuda write complex numbers — errors:class “cuComplex” has no member “i”
  4. Python3 JSON处理
  5. 探索 Linux 内存模型--转
  6. 小赋诗歌一首,以感学生时代结束
  7. 51nod 1267 4个数和为0
  8. 如何定义一个类对象并用next()的方法使用_深入理解-可迭代对象、迭代器(20个为什么)...
  9. mysql数据压缩存储_压缩文本,然后存储在mysql数据库中
  10. python生成exe启动很慢,win2000上的python启动非常慢
  11. $科大讯飞开放平台——语音听写接口的使用
  12. Xamarin自学教程(Android)之一
  13. 【TabularData】DNN和表格数据分析建模综述
  14. centeros安装minio
  15. wps垂直排列标题与文本_如何垂直设置wps文本
  16. PLC M8000 M8001 M8002 M8003
  17. 安卓无线打印服务器,安卓 打印服务器
  18. django中cookie模板引用
  19. Linux7 core是什么系统,Centos7+.NET CORE初探
  20. 计算机系统结构 2:局部性原理

热门文章

  1. 转Git学习碰到的问题
  2. 杭电2027--统计元音
  3. Spring+Hibernate整合Hessian
  4. 谁扰乱了中国的工资秩序?
  5. python字符串的删除操作_Python字符串操作
  6. iOS searchbar拼音和汉字搜索全国城市
  7. JavaScript知识点之“事件机制”
  8. spring框架总结
  9. Python字符串常用操作方法
  10. javascript 总结(常用工具类的封装,转)