繁体   English   中英

GC如何知道要释放的内存?

[英]How GC know which memory is to deallocate?

我对C ++中的垃圾收集器感到好奇。 我知道他们可以通过使用分配方法来控制内存分配。 像Boehm GC

#include "gc.h"
#include <assert.h>
#include <stdio.h>

int main()
{
  int i;

  GC_INIT();    /* Optional on Linux/X86; see below.  */
  for (i = 0; i < 10000000; ++i)
   {
     int **p = (int **) GC_MALLOC(sizeof(int *));
     int *q = (int *) GC_MALLOC_ATOMIC(sizeof(int));
     assert(*p == 0);
     *p = (int *) GC_REALLOC(q, 2 * sizeof(int));
     if (i % 100000 == 0)
       printf("Heap size = %d\n", GC_get_heap_size());
   }
  return 0;
}

但是我不明白GC如何知道该变量不再使用? 它应该被释放。

垃圾回收全都与指针有关。 如果您可以通过遵循一系列指针来访问已分配的内存块,则该内存块仍可能正在使用中,不应释放。 C ++的困难在于知道什么是指针,什么不是指针。 一旦编译了C ++,就很难说出指针和整数之间的区别

Boehm是所谓的保守垃圾收集,这实际上意味着它假设一切都是指针。 这意味着有时它不会释放它可以释放的内存。 整数变量的值可能与分配的内存块的地址相同。

即便如此,仍然有可能欺骗Boehm,在像C ++这样的语言中,它有可能操纵指针(例如使用指针算术),因此Boehm最终将释放仍在使用的内存。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM