在C内存分配/释放由malloc
和free
。
在C ++内存分配/解除分配由new
和delete
。
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