Другие языки программирования и технологии
почему в Java сборщик мусора реализован, а в С++ его нереально реализовать?
Java проги исполняются под чутким руководством JAVA машины, а С++ сам по себе с ним никто не нянчится
Теоретически все возможно, почему бы и нет.
Просто во времена тотального С++ компьютеры не могли себе позволить тратить ресурсы на такие задачи, как отслеживание использования указателей. И до сих пор этот язык используется для создания приложений для систем с ограниченными ресурсами и временем реакции (realtime/embedded).
Еще один момент - арифметика указателей. Значение указателя может измениться, и при этом совершенно неочевидно, что память можно освобождать. Даже наверняка - нельзя.
Просто во времена тотального С++ компьютеры не могли себе позволить тратить ресурсы на такие задачи, как отслеживание использования указателей. И до сих пор этот язык используется для создания приложений для систем с ограниченными ресурсами и временем реакции (realtime/embedded).
Еще один момент - арифметика указателей. Значение указателя может измениться, и при этом совершенно неочевидно, что память можно освобождать. Даже наверняка - нельзя.
Именно на С++ он и реализуется программистами. Но в С++ дело самих программистов: либо менять память на скорость, либо наоборот
не сорите!
а если серьезно, то идеалогия языка C++, такова, что подразумевает низкоуровневый доступ к памяти, поэтому все операции делаются руками
но (!) есть реальное подъспорье в этом вопросе, например: используйте классы для работы со строками и вам не прийдется руками выделять память под них; используйте smart-указатели, чтобы автоматически удалять объекты по выходу из области видимости; используйте STL и др.
ну или Managed C++ (это смесь с .net, а там есть GC)
а если серьезно, то идеалогия языка C++, такова, что подразумевает низкоуровневый доступ к памяти, поэтому все операции делаются руками
но (!) есть реальное подъспорье в этом вопросе, например: используйте классы для работы со строками и вам не прийдется руками выделять память под них; используйте smart-указатели, чтобы автоматически удалять объекты по выходу из области видимости; используйте STL и др.
ну или Managed C++ (это смесь с .net, а там есть GC)
В С++ есть вспомогательные классы (интеллектуальные указатели) которые в некоторой мере облегчают уборку memory leaks. Но поскольку С++ создавался как надстройка над С, который в свою очередь был портабельным ассемблером, то функции по уборке мусора были полностью возложены на программиста. Благодаря этому время очистки детерминировано. Это огромное преимущество для ситем реального времени которые на Java написать практически невозможно. В Java уборщик мусора оставляет за собой право периодически полностью блокировать доступ к участкам памяти для своих нужд уплотнения. И пользовательские процессы в Java периодически замораживаются во времени. Это плата за GC.
Похожие вопросы
- Почему Жаба(Java) такой популярный? Сколько не пытался не понимаю!
- Почему ругают Java?
- Что конкретно пишут на языке Java? Над чем работают ?
- Проблема с Java
- как в играх реализован переход между уровнями
- JAVA - Server - Socket как обнаружить разрыв соединения.. Метод какой-нить есть?
- Java для серверных приложений !!!
- Можете привести 5ть готовых примеров-решений, выполненных на JAVA ?
- Хочу стать Java программистом, для этого нужно знать JAVA)))
- Закончил институт на программиста. Куда податься с таким дипломом? Кем лучше устроиться, 1С или Java?