当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:54:00  来源:本站整理

C++内存管理改革(3):另类内存管理[VC/C++编程]

赞助商链接



  本文“C++内存管理改革(3):另类内存管理[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

最简单的C++/Java程序

最简单的Java程序:

class Program
{
public static void main()
{
new int;
}
}

对应的C++程序:

void main()
{
new int;
}

我想没有一个Java程序员会认为上面的Java代码存在问题.但是全部严谨的C++程序员则即刻指出:上面这个C++程序有问题,它存在内存泄露.但是我本日想和大家交流的一个见解是:这个C++程序没有什么问题.

DocX程序的内存管理

DocX是我开辟的一个文档撰写工具.这里有关于它的一些介绍.在这一小节里,我要谈谈我在DocX中尝试的另类内存管理办法.

DocX的总体流程是:

读入一个C++源代码(或头)文件(.h/.c/.hpp/.cpp等),解析此中的注释,提取并生成xml文档.

通过xslt变更,将xml文档转换为htm.

解析源代码中的全部include指令,获得呼应的头文件途径,假如某个头文件没有解析过,跳到1反复这些步骤.

最后全部生成的htm打包生成chm文件.

一开始,我象Java/C#程序员做的那样,我的代码中全部的new均不考虑delete.当然,它一向运作得很好,直到有一天我的文档累计到了一定程度后.正如我们预见的那样,DocX程序运行崩溃了.

那么,怎么办呢?找到全部需求delete的地方,补上delete?

这其实并不需求.在前面,我给大家介绍了AutoFreeAlloc(拜见《C++内存管理改革(2):最袖珍的垃圾回收器》),大概有人在嘀咕,这样一个内存分配器到底有何作用.——那么,目前你即刻可以看到它的典型用法之一了:

关于我们的DocX崩溃后,我只是做了以下窜改:

加一个全局变量:std::AutoFreeAlloc alloc;

全部的new Type(arg1, arg2, …, argn),改成STD_NEW(alloc, Type)(arg1, arg2, …, argn);

全部的new Type[n],改成STD_NEW_ARRAY(alloc, Type, n);

每处理完一个源代码文件时,调用一次alloc.clear();

搞定,自此之后,DocX再也没有内存泄露,也不再有碰到内存不足而崩溃的情形.


  以上是“C++内存管理改革(3):另类内存管理[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • <b>java的static内部类</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .