热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

编译为c时进行垃圾收集的算法

我需要某种算法将垃圾收集添加到我的语言(正在编译为c)并添加一个free语句或其他方式,以便它不会有内存泄漏。是

我需要某种算法将垃圾收集添加到我的语言(正在编译为 c)并添加一个 free 语句或其他方式,以便它不会有内存泄漏。

是的,我在编译为 C 时查看了垃圾收集,但我不明白答案,并希望得到关于如何做的更详细的答案。

编辑:例如,如果代码是

int *i = malloc(4);

int *i = malloc(4);

用我的语言,这应该编译为

进而

free(i);

一旦我不再使用或退出堆栈框架 谢谢

回答


您首先需要阅读垃圾收集手册。

您稍后需要用书面英语记录垃圾收集器的约定和不变量。是分代GC吗?它是多线程友好的吗?它是精确的还是保守的?

C.Queinnec Lisp In Small Pieces的书很有帮助。它描述了如何编写各种 Lisp 解释器,以及一些 Lisp 到 C 编译器的代码。一些章节与垃圾收集及其与生成的 C 代码的关系有关。

在龙书(约编译)对GC的一章。

A.Appel 的书Compiling with Continuations也很有帮助。

然后,您可以记录并可能定义实现您的 GC 约定的

请注意,这malloc可以被视为一种分配垃圾收集数据的缓慢方式。例如阅读 Appel 的旧论文Garbage Collection 可以比 Stack allocation 更快(后来讨论过,但它确实提供了一个很好的直觉)。您可以考虑使用mmap(2)获取大内存区域并以更快的方式在其中分配。然后你不会free单独的垃圾值(如果你采用复制 GC 策略,使用切尼算法),但会munmap(2)一次大内存区域。还要研究malloc在GNU libc或musl libc中实现的 C 源代码。

请参阅我的Bismon项目作为带有 GC 的 C 代码(开源,适用于 Linux)的示例。

另请查看Ocaml解释器和编译器的 C 代码。

或者在SBCL或Chicken/Scheme的 C 运行时内。

或者在一些开源JVM的代码中。

该中的bigloo项目是一个Lisp的C编译器。

在GNU Emacs的编辑器包含一个垃圾收集器。该GCC编译器还包含一个。

循环引用很难用引用计数方案处理。

还可以考虑使用Boehm 保守垃圾收集器开源库。

您的 GC 将特定于操作系统,并且可能特定于目标处理器。

所述RefPerSys项目(在C ++中,随着代的C ++在运行时代码)具有GC。

最后,valgrind实用程序(检测内存泄漏的工具)是开源的,可以认为包含一些 GC。

另请阅读最近提交给ACM SIGPLAN会议的论文。其中一些与垃圾收集有关。考虑稍后提交您自己的关于 GC 的论文。

预算几年的全职工作。

附注。作为介绍,请阅读 P.Wilson Uniprocessor Garbage Collection Techniques的旧论文






推荐阅读
  • 本文基于Java官方文档进行了适当修改,旨在介绍如何实现一个能够同时处理多个客户端请求的服务端程序。在前文中,我们探讨了单客户端访问的服务端实现,而本篇将深入讲解多客户端环境下的服务端设计与实现。 ... [详细]
  • 本文探讨了Java中线程的多种终止方式及其状态转换,提供了关于如何安全有效地终止线程的指导。 ... [详细]
  • JUC并发编程——线程的基本方法使用
    目录一、线程名称设置和获取二、线程的sleep()三、线程的interrupt四、join()五、yield()六、wait(),notify(),notifyAll( ... [详细]
  • 本文总结了近年来在实际项目中使用消息中间件的经验和常见问题,旨在为Java初学者和中级开发者提供实用的参考。文章详细介绍了消息中间件在分布式系统中的作用,以及如何通过消息中间件实现高可用性和可扩展性。 ... [详细]
  • 关于进程的复习:#管道#数据的共享Managerdictlist#进程池#cpu个数1#retmap(func,iterable)#异步自带close和join#所有 ... [详细]
  • 大华股份2013届校园招聘软件算法类试题D卷
    一、填空题(共17题,每题3分,总共51分)1.设有inta5,*b,**c,执行语句c&b,b&a后,**c的值为________答:5 ... [详细]
  • 深入解析Unity3D游戏开发中的音频播放技术
    在游戏开发中,音频播放是提升玩家沉浸感的关键因素之一。本文将探讨如何在Unity3D中高效地管理和播放不同类型的游戏音频,包括背景音乐和效果音效,并介绍实现这些功能的具体步骤。 ... [详细]
  • ArcBlock 发布 ABT 节点 1.0.31 版本更新
    2020年11月9日,ArcBlock 区块链基础平台发布了 ABT 节点开发平台的1.0.31版本更新,此次更新带来了多项功能增强与性能优化。 ... [详细]
  • 视觉Transformer综述
    本文综述了视觉Transformer在计算机视觉领域的应用,从原始Transformer出发,详细介绍了其在图像分类、目标检测和图像分割等任务中的最新进展。文章不仅涵盖了基础的Transformer架构,还深入探讨了各类增强版Transformer模型的设计思路和技术细节。 ... [详细]
  • 贡献转移在计算每个元素的作用的时候,我们可以通过反向枚举作用效果,添加到作用元素的身上,这种方法叫做贡献转移。更正式的说, ... [详细]
  • 服务器虚拟化存储设计,完美规划储存与资源,部署高性能虚拟化桌面
    规划部署虚拟桌面环境前,必须先估算目前所使用实体桌面环境的工作负载与IOPS性能,并慎选储存设备。唯有谨慎估算贴近实际的IOPS性能,才能 ... [详细]
  • 使用Matlab创建动态GIF动画
    动态GIF图可以有效增强数据表达的直观性和吸引力。本文将详细介绍如何利用Matlab软件生成动态GIF图,涵盖基本代码实现与高级应用技巧。 ... [详细]
  • 驱动程序的基本结构1、Windows驱动程序中重要的数据结构1.1、驱动对象(DRIVER_OBJECT)每个驱动程序会有唯一的驱动对象与之对应,并且这个驱动对象是在驱 ... [详细]
  • 我自己做了一个网站图片的抓取,感觉速度有点慢抓取4000张图片可能得用15分钟左右的时间,我百度看用线程可以加快抓取,然后创建了5个线程抓取,但是5个线程是同步执行同样的操作一个图片就 ... [详细]
  • 在iOS开发中,多线程技术的应用非常广泛,能够高效地执行多个调度任务。本文将重点介绍GCD(Grand Central Dispatch)在多线程开发中的应用,包括其函数和队列的实现细节。 ... [详细]
author-avatar
唯爱-U澄_155
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有