В копирующем сборщике мусора, когда я копирую объекты из космоса в космос, на некоторые объекты можно ссылаться указателем, хранящимся в регистре. Когда происходит сборка мусора, этот регистр необходимо обновить, чтобы он указывал на пробел.
Проблема в том, что сборка мусора выполняется в определенных c точках во время программы (скажем, когда пользователь выделяет память) и, таким образом, это вызовет функцию для сбора данных. Это, в свою очередь, будет использовать регистры, которые могут быть теми, которые нам действительно нужны для пересылки. Таким образом, это создает множество проблем:
- Регистр, который нам нужно переслать, не будет содержать адрес объекта, который должен быть переслан.
- Регистр будет восстановлен при возврате из функция сборки мусора, поэтому мы все равно не можем переслать ее на этом этапе.
Так как же я могу выполнить переадресацию указателя для объекта, указатель которого хранится в указателе? Мы можем предположить, что сборщик мусора записан в C, а не в сборке (что облегчает не перезаписывать регистры).