Все темы

Archives for: September 2009, 19

А нужен ли козе баян, а C++ - уборщик мусора?

Lex Kravetski пишет:

...в ряде случаев внешний по отношению к коду сборщик мусора имеет гораздо больше возможностей для эффективного освобождения памяти. Например, он может очищать память блоками, даже если она использовалась разными объектами. В С++ без хитрых хаков такое организовать невозможно. delete очищает только то, что для этого объекта выделил new (и то не всегда — ловкими кастами вполне можно обмануть delete). Чтобы освободить память сразу для множества указателей, надо переопределять new через сишные функции.

В C++ можно размещать объекты на стеке, в статическом сегменте и внутри друг друга (предки и поля физически находятся внутри блока памяти содержащего их объекта). Таким образом, затраты на распределение и очистку памяти большого количества объектов (в т.ч. локальных, т.е. наиболее часто конструируемых и разрушаемых) в "плюсах" равну нулю, что по определению уделывает любой сборщик мусора. Даже если речь идёт про кучу: вся иерархия и члены одного объекта в C++ находятся в непрерывном блоке памяти, который распределяется и удаляется всего одним системным вызовом. Поэтому по сравнению с другими языками, у которых поля-объекты технически являются ссылками на отдельно выделенные в куче объекты, у C++ есть врождённое преимущество в эффективности, которое только безграмотный программист не учитывает, используя new-delete для объектов, которые можно было бы создавать другим способом (кстати, этим катастрофически грешат программисты, перешедшие на C++ с Delphi или Java: они все локальные переменные и поля-объекты строят через new, просто потому, что они так привыкли).

·· [Read more · Читать дальше] ·· »»»

Archives

                                                                                                                                                                                                                                                                   


© Sergey A. Galin, 1998-2021 sageshome.net/blog/