垃圾收集器如何知道原始指针并且不再使用其引用的内存

时间:2015-05-27 05:35:45

标签: garbage-collection

我是垃圾收集的新手,我已阅读此页: A garbage collector for C and C++,它在页面中提供了一个简单示例:Using the Garbage Collector: A simple example

    #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;
    }

这里,*p是垃圾收集器管理内存中的指针,它指向托管内存中的内存。

我很好奇垃圾收集器如何知道先前for循环中分配的两个内存已泄露,应该在下一个for循环中回收。

0 个答案:

没有答案