簡體   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