为什么知道是否需要某块内存是不可判定的?
Why knowing whether some piece of memory is needed is undecidable?
我正在阅读 Mozilla 的 Javascript 教程,并了解了这条信息。
High-level languages embed a piece of software called "garbage
collector" whose job is to track memory allocation and use in order to
find when a piece of allocated memory is not needed any longer in
which case, it will automatically free it. This process is an
approximation since the general problem of knowing whether some piece
of memory is needed is undecidable (can't be solved by an algorithm).
我熟悉不可判定性和垃圾收集器的概念,但我似乎无法理解为什么这是一个不可判定的问题?
因此您可以修改任何程序以在堆上分配一些 space 并且仅在原始程序终止时访问它。如果程序没有终止,最佳垃圾收集器将只收集内存。
我们可以决定程序是否终止吗?
我所熟悉的所有垃圾收集器都通过收集无法再访问的内存来工作,例如指向它的所有(传递闭包)变量都超出了范围。但这是对可以收集的内存空间集的近似值不足,因为在任何时候,内存位置可能仍然有一个变量指向它,但它永远不会被再次访问。
找到可收集的精确内存空间集合可以简单地归结为任何未定问题 - 例如,在以下程序中找到可在 A 点收集的内存空间集合:
x = allocate()
// Point A
if (result of some known-to-be-undecidable problem is true):
print(x)
所以发现那个集合本身是不可判定的。
我正在阅读 Mozilla 的 Javascript 教程,并了解了这条信息。
High-level languages embed a piece of software called "garbage collector" whose job is to track memory allocation and use in order to find when a piece of allocated memory is not needed any longer in which case, it will automatically free it. This process is an approximation since the general problem of knowing whether some piece of memory is needed is undecidable (can't be solved by an algorithm).
我熟悉不可判定性和垃圾收集器的概念,但我似乎无法理解为什么这是一个不可判定的问题?
因此您可以修改任何程序以在堆上分配一些 space 并且仅在原始程序终止时访问它。如果程序没有终止,最佳垃圾收集器将只收集内存。
我们可以决定程序是否终止吗?
我所熟悉的所有垃圾收集器都通过收集无法再访问的内存来工作,例如指向它的所有(传递闭包)变量都超出了范围。但这是对可以收集的内存空间集的近似值不足,因为在任何时候,内存位置可能仍然有一个变量指向它,但它永远不会被再次访问。
找到可收集的精确内存空间集合可以简单地归结为任何未定问题 - 例如,在以下程序中找到可在 A 点收集的内存空间集合:
x = allocate()
// Point A
if (result of some known-to-be-undecidable problem is true):
print(x)
所以发现那个集合本身是不可判定的。