Автор Вадик рембо задал вопрос в разделе Другие языки и технологии
почему в Java сборщик мусора реализован, а в С++ его нереально реализовать? и получил лучший ответ
Ответ от Ночник[гуру]
Java проги исполняются под чутким руководством JAVA машины, а С++ сам по себе с ним никто не нянчится
Ответ от Jurijus Zaksas[гуру]
Теоретически все возможно, почему бы и нет.
Просто во времена тотального С++ компьютеры не могли себе позволить тратить ресурсы на такие задачи, как отслеживание использования указателей. И до сих пор этот язык используется для создания приложений для систем с ограниченными ресурсами и временем реакции (realtime/embedded).
Еще один момент - арифметика указателей. Значение указателя может измениться, и при этом совершенно неочевидно, что память можно освобождать. Даже наверняка - нельзя.
Теоретически все возможно, почему бы и нет.
Просто во времена тотального С++ компьютеры не могли себе позволить тратить ресурсы на такие задачи, как отслеживание использования указателей. И до сих пор этот язык используется для создания приложений для систем с ограниченными ресурсами и временем реакции (realtime/embedded).
Еще один момент - арифметика указателей. Значение указателя может измениться, и при этом совершенно неочевидно, что память можно освобождать. Даже наверняка - нельзя.
Ответ от Lord mayton[гуру]
В С++ есть вспомогательные классы (интеллектуальные указатели) которые в некоторой мере облегчают уборку memory leaks. Но поскольку С++ создавался как надстройка над С, который в свою очередь был портабельным ассемблером, то функции по уборке мусора были полностью возложены на программиста. Благодаря этому время очистки детерминировано. Это огромное преимущество для ситем реального времени которые на Java написать практически невозможно. В Java уборщик мусора оставляет за собой право периодически полностью блокировать доступ к участкам памяти для своих нужд уплотнения. И пользовательские процессы в Java периодически замораживаются во времени. Это плата за GC.
В С++ есть вспомогательные классы (интеллектуальные указатели) которые в некоторой мере облегчают уборку memory leaks. Но поскольку С++ создавался как надстройка над С, который в свою очередь был портабельным ассемблером, то функции по уборке мусора были полностью возложены на программиста. Благодаря этому время очистки детерминировано. Это огромное преимущество для ситем реального времени которые на Java написать практически невозможно. В Java уборщик мусора оставляет за собой право периодически полностью блокировать доступ к участкам памяти для своих нужд уплотнения. И пользовательские процессы в Java периодически замораживаются во времени. Это плата за GC.
Ответ от Ўрий-17[гуру]
Именно на С++ он и реализуется программистами. Но в С++ дело самих программистов: либо менять память на скорость, либо наоборот
Именно на С++ он и реализуется программистами. Но в С++ дело самих программистов: либо менять память на скорость, либо наоборот
Ответ от Vinnitu[гуру]
не сорите!
а если серьезно, то идеалогия языка C++, такова, что подразумевает низкоуровневый доступ к памяти, поэтому все операции делаются руками
но (!) есть реальное подъспорье в этом вопросе, например: используйте классы для работы со строками и вам не прийдется руками выделять память под них; используйте smart-указатели, чтобы автоматически удалять объекты по выходу из области видимости; используйте STL и др.
ну или Managed C++ (это смесь с .net, а там есть GC)
не сорите!
а если серьезно, то идеалогия языка C++, такова, что подразумевает низкоуровневый доступ к памяти, поэтому все операции делаются руками
но (!) есть реальное подъспорье в этом вопросе, например: используйте классы для работы со строками и вам не прийдется руками выделять память под них; используйте smart-указатели, чтобы автоматически удалять объекты по выходу из области видимости; используйте STL и др.
ну или Managed C++ (это смесь с .net, а там есть GC)
Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с ответами на Ваш вопрос: почему в Java сборщик мусора реализован, а в С++ его нереально реализовать?
В чём отличия c++ и java?
Java запускается на собственной java-машине, что делает её кросплатформенной. В java свой
подробнее...
Что изучать, C++ или Java?
ИМХО JAVA легче в освоении, т. к. кучу вопросов берёт на себя среда исполнения + безнапряжная
подробнее...
спросили в Другое
Что такое Java?
Джава — это язык программирования и вычислительная платформа, впервые выпущенная компанией САН
подробнее...
Что такое Java?
Джава — это язык программирования и вычислительная платформа, впервые выпущенная компанией САН
подробнее...
спросили в C Sharp
В чем отличие С++ от С, С#, и С#.Net и какое отношение к ним имеет Sharp
С это подмножество С++. То есть изучив С++ вы должны без проблем понимать С.
Грубо
подробнее...
В чем отличие С++ от С, С#, и С#.Net и какое отношение к ним имеет Sharp
С это подмножество С++. То есть изучив С++ вы должны без проблем понимать С.
Грубо
подробнее...
Что за река на фото, где протекает и в чем ее «рекорд»?
Цитарум (Citarum) — река в Индонезии, протекает рядом со столицей страны Джакартой (West Java
подробнее...