相关疑难解决方法(0)

如何实现垃圾收集器?

谁能指出我如何实现垃圾收集的良好来源?我正在制作类似lisp的解释语言.它目前使用引用计数,但当然在释放循环依赖对象时失败.

我一直在阅读标记和扫描,三色标记,移动和不移动,增量和停止世界,但是......我不知道什么是最好的方法来保持对象整齐地分成几组同时保持对象内存开销至少,或者如何以递增方式执行操作.

我已经阅读了一些语言,参考计数使用循环参考检测,我可以使用.我知道我可以使用像Boehm这样的免费收藏家,但我想学习如何自己动手.

我会很感激任何在线资料,对于像我这样没有经验的人有某种教程或帮助.

garbage-collection

55
推荐指数
3
解决办法
2万
查看次数

这是什么样的排序?

假设我有一个整数列表,其中每个元素都是1到20之间的数字.(这不是我想要排序的.)

现在,我有一个"操作"数组,其中每个操作:

  • 从列表中删除某些(已知)数字
  • 在列表中添加某些其他(已知)数字
  • 无法处理的列表,如果它包含在操作开始时一定(已知)的数字-调用这些预防

编辑:每个操作的每个添加,删除阻止中都可以有零个或多个数字,并且每个组的每个数字在某些操作中可以出现零次或多次.对于任何给定的操作,再添移除了是不相交的,预防移除了不相交,但再添防止可能重叠.

我想对操作数组进行排序,以便每个操作:

  • 如果操作具有" 预防"项,则会在删除这些编号的操作之后放置该项.如果不是紧接着,则不能有Adds操作在最后的RemovesPrevent之间添加这些数字.
  • 如果操作删除项目,则添加任何这些项目的所有操作都放在其前面.

如果存在循环依赖关系,则操作链应删除尽可能多的数字,通知我它无法删除所有数字.

这种算法的名称/实现是否优于我下面的算法?

添加8/23:赏金用于考虑OpCodes(结构集)和InstructionSemantics(枚举中的位标志集)的排序要求.

在8月23日晚些时候添加:我通过启发式预先对源数组进行排序,使性能提高了89:1.有关详情,请参阅我当前的答案

namespace Pimp.Vmx.Compiler.Transforms
{
    using System;
    using System.Collections.Generic;
    using System.Reflection.Emit;

    internal interface ITransform
    {
        IEnumerable<OpCode> RemovedOpCodes { get; }
        IEnumerable<OpCode> InsertedOpCodes { …
Run Code Online (Sandbox Code Playgroud)

language-agnostic sorting algorithm

6
推荐指数
1
解决办法
741
查看次数

请问内存分配和垃圾收集有什么区别?

我知道'垃圾收集'是一种内存管理形式,它是一种自动回收未使用内存的方法.

但是什么是"内存分配"以及与"垃圾收集"的概念差异?

memory-management

1
推荐指数
1
解决办法
2268
查看次数