Другие языки программирования и технологии

почему в Java сборщик мусора реализован, а в С++ его нереально реализовать?

Сергей ****
Сергей ****
392
Java проги исполняются под чутким руководством JAVA машины, а С++ сам по себе с ним никто не нянчится
Azamat Amatov
Azamat Amatov
2 591
Лучший ответ
Теоретически все возможно, почему бы и нет.
Просто во времена тотального С++ компьютеры не могли себе позволить тратить ресурсы на такие задачи, как отслеживание использования указателей. И до сих пор этот язык используется для создания приложений для систем с ограниченными ресурсами и временем реакции (realtime/embedded).
Еще один момент - арифметика указателей. Значение указателя может измениться, и при этом совершенно неочевидно, что память можно освобождать. Даже наверняка - нельзя.
Именно на С++ он и реализуется программистами. Но в С++ дело самих программистов: либо менять память на скорость, либо наоборот
не сорите!

а если серьезно, то идеалогия языка C++, такова, что подразумевает низкоуровневый доступ к памяти, поэтому все операции делаются руками

но (!) есть реальное подъспорье в этом вопросе, например: используйте классы для работы со строками и вам не прийдется руками выделять память под них; используйте smart-указатели, чтобы автоматически удалять объекты по выходу из области видимости; используйте STL и др.

ну или Managed C++ (это смесь с .net, а там есть GC)
Юрий Щетинин
Юрий Щетинин
5 701
В С++ есть вспомогательные классы (интеллектуальные указатели) которые в некоторой мере облегчают уборку memory leaks. Но поскольку С++ создавался как надстройка над С, который в свою очередь был портабельным ассемблером, то функции по уборке мусора были полностью возложены на программиста. Благодаря этому время очистки детерминировано. Это огромное преимущество для ситем реального времени которые на Java написать практически невозможно. В Java уборщик мусора оставляет за собой право периодически полностью блокировать доступ к участкам памяти для своих нужд уплотнения. И пользовательские процессы в Java периодически замораживаются во времени. Это плата за GC.