Re[2]: придумайте умный вопрос по с++
От: remark Россия http://www.1024cores.net/
Дата: 16.08.07 10:06
Оценка: 3 (2)
Здравствуйте, Посторонним В., Вы писали:

ПВ>Здравствуйте, Awaken, Вы писали:


A>>надо для собеседования

A>>-почему в С++ нельзя реализовать полноценный сборщик мусора?

ПВ>Хотелось бы услашать ответ на этот вопрос.

ПВ>С технологией GC не знаком, но на ум приходят кольцевые ссылки и наличие в C++ деструкторов.

Имхо, это не составляет проблем, основные засады — наличие арифметики с указателями (они же хендлы объекты) и нетипибезопасность.

Например, законный (ну если и не законный, то так скажем... возможно используемый... в том или ином виде) пример:

char* p = 0;

void alloc()
{
  char* l = (char*)malloc(100);
  p = l + 200;
}

void use()
{
  char* l = p - 200;
  // ...
}


Или что-то типа такого:

A* a = 0;
B* b = 0;

void alloc()
{
  char* p = (char*)malloc(100);
  a = new (p + 10) A();
  b = new (p + 60) B();
}


В языках со встроенной сборкой мусора нет адресной арифметики, нет inner pointer (указателей "внутрь" объекта). Если объектные хендлы — есть чётко типизированные хендлы "на начало" объекта.

В этом смысле cli::inner_ptr из c++/cli создаёт определённые трудности, но там ввели дополнительные ограничения и требования.


1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.