c/c++语言开发共享如何在C中进行自动内存管理?

在C内存分配/释放由mallocfree

在C ++内存分配/解除分配由newdelete

C ++中有一些用于自动内存管理的解决方案,例如:

但是如何在C中进行自动内存管理?

C中的AUTOMATIC内存管理有什么解决方案吗?

对于C,有没有任何指导或类似的指导?

我想要free一块内存:

– 要么 –

然后我说: 哦,C比C ++,Java和C#更好。 ?

    您可以使用Boehm垃圾收集器库 。

    正如Juraj Blaho所回答的 ,你可以使用垃圾收集库,比如Boehm保守的垃圾收集器 ,但还有其他的: Ravenbrook的内存池系统 ,我的(未维护的) Qish GC , Matthew Plant的GC等等……

    通常,您可以编写专门用于您的用例的垃圾收集器 。 您可以在C中使用问题中提到的技术(智能指针,引用计数),但您也可以实现标记和扫描GC或复制GC。

    编码GC时的一个重要问题是跟踪本地指针变量(对垃圾收集数据)。 您可以将它们保存在本地struct并将它们链接在一起。

    我强烈建议您阅读有关GC的更多信息,例如GC手册 。 那里的算法在许多情况下都很有用。

    您甚至可以自定义GCC编译器(例如使用MELT )来添加检查或生成特定GC实现的代码(例如,扫描局部变量的代码)。 或者您可以使用一些预处理器(例如GPP )

    在实践中,Boehm的GC通常足够好。

    请注意,某些数据的活跃性是整个程序属性。 因此,最好在软件开发的设计阶段尽早考虑GC。

    另请注意,通过静态源代码分析可靠地检测内存泄漏通常是不可能的( 不可判定的 ),因为它可以certificate等同于暂停问题 。

    对于linux,我使用valgrind。 当然,为什么构建valgrind的原因是为了调试你的代码,但它确实做了很多。 它甚至会以非侵入性方式告诉您可能存在错误代码的位置。 我自己的命令行如下。

     # Install valgrind. Remove this line of code if you already have it installed apt install valgrind # Now, compile and valgrind the C gcc main.c -Werror -fshort-enums -std=gnu11 -Og -g3 -dg -gdwarf-2 -rdynamic -o main valgrind --quiet --leak-check=yes --tool=memcheck -Wall ./main 

    希望这可以帮助。 〜快乐的编码!

    需要了解更多c/c++开发分享如何在C中进行自动内存管理?,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!

      以上就是c/c++开发分享如何在C中进行自动内存管理?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/979202.html

      (0)
      上一篇 2021年12月12日
      下一篇 2021年12月12日

      精彩推荐