malloc动态分配的内存的生存周期是多少??当时直接回答,当然是在调用free进行释放之前阿!!但回头我仔细想过这个问题,在free调用之前那段范围内,但free只有一个指针参数,它是如何知道要释放多少空间呢??比如:

int*pInt=(int*)malloc(10*sizeof(int));

…….;

free(p);

这里free是如何知道释放10个int大小的空间呢??既然free只需要一个参数—指针类型,那么这个地址(malloc返回的)一定作过什么特殊处理了.于是我问了一些网上的朋友,我得出以下一些结果:

char*p=malloc(size):

1. 实际分配一块size + 4大小的内存,char *p = 内存首地址。

2. *((int *)p) = size; //把大小放在分配内存的起始处。

3. return (void*)(p + 4); //返回除去存放大小以后的部分。

free(p); 1. char* q = (char *)p - 4;

2. int size = *((int *)q); //这里找到了size...

3. 通过操作系统释放内存或自己管理C/C++堆内存.

这里要涉及到一些OS管理内存得问题,非我力所能及,但我们可以知道,malloc确实实施了一些特殊的处理.言归正传.让我们看看下面一段c++代码:

int*p=new int[10];

delete []p;

一眼就看出上面得代码完成的和上面的c代码一样的功能.这里有同样的问题,为什么delete

能在不指定动态分配的数组size下就能释放所分配的对象呢,是不是new操作也对返回的地址作了一些手脚???答案:是.new所作的处理和上面的方法一样的,即:new所传回的每一个内存区域配置一个额外的DWORD,然后把元素数目包藏到那个DWORD中.(不是所有编译器都采用这个方法的,我只试过vc6和bcc55编译器,它们都采用这个方法.不过,<>上只是说配置一个额外的word).为了验证这个说法,我写下了下面的代码进行测试.:[NextPage]

#include

class complex

{

public:

complex(int=0,int=0){cout<

~complex(){cout<

private:

int i,j;

};

int main()

{

complex*array=new complex[10];

long*t=(long*)((char*)(array)-4);

cout<

//*t=20; //(2)

delete []array;

return 0;

}

其中(1)输出array数组的维数10.这里很明显了,动态分配complex对象的个数就是放在返回array地址前一个DWORD(四个字节)内.现在问题解决了,我们已经知道new所作的什么处理了,^_^,不过问题又来了,编译器采取的策略会不会引起我们忧虑??对,的确,只要我们修改那个DWORD的内容,那delete就不能正确释放所分配的内存空间了.(^_^.你试试把(2)前面那条的注释给去掉,就会有意想不到的输出)

考试大编辑:c++编译器为我们做了太多的事,导致了c++很复杂,有些东西,让编译器修改得连我们都不认识自己的代码了,有些东西如果搞明白了,学其他的(比如COM,ATL等,虽然本问与此关系不大)或许会轻松许多的.

C语言计算机二级考动态分配内存吗,08年计算机二级C语言辅导:malloc动态分配的内存的生存周期是多少?...相关推荐

  1. 计算机软考中级网络工程师,如何复习计算机软考中级网络工程师更有效

    原标题:如何复习计算机软考中级网络工程师更有效 教材是基础知识最好的来源,教材中每一章课后都会总结出本章重点以及考点,这对我们有模块的复习很有帮助.对于教材而言,盛泰鼎盛认为目录是很重要的,当你能够清 ...

  2. 计算机软考网络管理员题,2020年计算机软考网络管理员考前测试题及答案

    2020年计算机软考网络管理员考前测试题及答案 一.选择题: 1.网络协议主要要素为(C). A.数据格式.编码.信号电平 B.数据格式.控制信息.速度匹配 C.语法.语义.定时 D.编码.控制信息. ...

  3. 计算机软考职称属于哪个大类,计算机软考职称是什么

    原标题:计算机软考职称是什么 软考,是以考代评,以一个考试来代替提交若干材料的评职称的过程.所谓职称其实是一个专业技术职务,每个单位根据上级单位要求设置相应比例的高.中.初级专业技术岗位.根据总人数控 ...

  4. 计算机软考网络管理员满分,2016年计算机软考网络管理员必做试题

    一.选择题: 1.网络协议主要要素为(C). A.数据格式.编码.信号电平B.数据格式.控制信息.速度匹配 C.语法.语义.定时D.编码.控制信息.定时 2.网络协议中规定通信双方要发出什么控制信息, ...

  5. 计算机软考2008上半年,北京2008下半年计算机软考各科目考试安排

    根据人力资源和社会保障部.工业和信息化部全国计算机专业技术资格考试办公室<关于推迟的2008年下半年计算机技术与软件专业技术资格考试有关问题的通知>(软考办[2008]6号)文件精神,北京 ...

  6. 计算机及其应用本课程,北京08自考计算机及应用(独本)课程设置

    专业名称:计算机及应用(独立本科段)(2008年起执行) 专业代码:01B0801 序号 课程代码 课程名称 学分 备注 1 03708 中国近现代史纲要 2 必考课 共14门 2 03709 马克思 ...

  7. 全国计算机二级考c考点,2019年全国计算机二级C语言考试考点解析(1)

    程序的构成 尽管C程序的内容千变万化,但是它们的构成都是一致的,一个完整的C源程序的格式可以如下表示: 编译预处理 主函数() 函数() . . . 函数() 从上面中可以看出,一个C源程序实际上就是 ...

  8. 计算机二级考asc2码吗,2017年计算机二级考试ACCESS重要知识点

    2017年计算机二级考试ACCESS重要知识点 数据的独立性包括逻辑独立性(数据库中数据库的逻辑结构和应用程序相互独立)和物理独立性(数据物理结构的变化不影响数据的逻辑结构).下面是小编整理的关于计算 ...

  9. 计算机软考access 题的做法_计算机二级Access 操作题汇总

    第 1 页 共 1 页 Access 操作题汇总 1 . '010 - ' 部分自动输出,后八位为 0 到 9 的数字显示. [输入掩码属性设置为: " 010- " 000000 ...

最新文章

  1. Java集合框架:EnumMap
  2. Jenkins+PowerShell持续集成环境搭建(二)控制台项目
  3. mysql的语句分类,查询、子查询及连接查询
  4. 周一02.1编程语言介绍
  5. SVN在centos5.4的安装步骤:
  6. C++程序设计之使用istringstream
  7. 16进制 hbase phoenix_【建议收藏】HBase表的RowKey设计
  8. android 不能接收组播数据,但能够发送组播数据
  9. Currency determination callback
  10. B2B行业网站电话销售应具备的精神
  11. linux文件目录作用,linux 文件目录,及其作用
  12. 黑马程序员php考试题,PHP基础案例教程
  13. 18家机构批量刷新SOTA!T5 is all you need!
  14. python stdout stderr 一起输出_关于python:您可以愚弄isatty并分别记录stdout和stderr吗?...
  15. 使用Maven导入MySQL驱动包遇到的问题
  16. 关于react-native-datetimepicker无法使用中文的问题;
  17. 计算机在生物技术的应用论文,计算机技术在生物学中的应用
  18. 2021-08-20
  19. Python简笔画——用Turtle库画一只《穿红靴子的小鸭》
  20. 文件损坏如何修复?简单的方法

热门文章

  1. SoundPool的sample 1 not READY问题
  2. android UI进阶之仿iphone的tab效果
  3. 如何对大数据进行数据分析
  4. 如何构建企业安全易用的数据资产
  5. linux+yum安装终端php,centos下yum搭建安装linux+apache+mysql+php环境教程
  6. 年龄是计数还是计量_MSA你只知道计量型和计数型?有哪些类型?分别是什么方法?...
  7. java摄像头推流,流媒体服务 javaCV-2 推流
  8. python列表推导式生成随机数_Python:列表推导式/生成器推导式
  9. jquery设置表单元素只读_jQuery为文本框添加只读属性readOnly
  10. apiclod 上传图片_apiCloud图片选择、处理、上传模块