LINUX.ORG.RU

Вопрос по ручному управлению памятью

 ,


1

2

Я в этом не разбираюсь, но возник такой вопрос. Считается, что в языках с GC нет ручного управления, а, например в сишке есть.

Меня заинтересовал вот какой вопрос. Допустим, мы пишем команду «освободить память такую-то». Интересно, что реально тут происходит в этот момент? Исполнение останавливается до тех пор, пока память не будет освобождена, а затем возобновляется? В таком случае, у нас разница между языком с GC и без него только в том, что нет накладных расходов на сам GC, на алгоритмы подсчета ссылок и/или обход дерева. Непосредственно на расход памяти это не влияет, практически, так получается?

И, кстати, что представляет из себя процесс освобождения памяти, на более низком уровне?

ЗЫ пришлось поставить тег c++, поскольку тегов связанных с «просто си» не нашел вообще. Подскажите что поставить по си.



Последнее исправление: cetjs2 (всего исправлений: 2)
Ответ на: комментарий от kawaii_neko

не использовать фабрики, синглтоны, делегаты, визиторы, фасады

Каждый раз, когда узнаю, что такое фабрика или синглтон, приходит осознание, что я это уже изобретал.

i-rinat ★★★★★
()
Ответ на: комментарий от kawaii_neko

Вот в этой строке:

auto a = make_unique<A>(10, «aaa», 20.2);

Я тут вызвал шаблонную функцию make_unique, которая вернула мне объект. Какие именно инструкции тут управляют памятью? Ведь для того, чтобы делать утверждения о ручном управлении памятью, нужно показать, что программист руками выделяет и освобождает память. Если выделение тут можно указать, то где же тут освобождение?

А затем в следующих строках ты писал

a->method

Это тоже управление памятью, на твой взгляд?

То, что компилятор вписал вызов деструктора на выходе из области видимости a — это не более чем сахарок

In computer science, syntactic sugar is syntax within a programming language that is designed to make things easier to read or to express

Нет, это не сахар.

forCe
()
Последнее исправление: forCe (всего исправлений: 2)
Ответ на: комментарий от forCe

Не, я не эксперт в автоматическом управлении ресурсами. Просто почитываю The Garbage Collection Handbook, по мотивам возникают всякие глупые идеи вроде вот этой. Собственных мыслей и прочитанных работ по теме у меня пока что немного.

P.S. И таки я осознал, почему не взлетит. Кажется, концептуально есть «RAII» и «не RAII». То есть, или ресурсы являются first-class citizens и в программах представляются объектами; или ресурсы существуют в параллельной вселенной и управляются только непрямо. Если базовый ресурс памяти управляется непрямо, то и все остальные ресурсы не могут быть полноценными объектами, ведь их надо хранить в памяти. И некий «GC, только для остальных ресурсов» будет функционально идентичен «обычному GC с финализаторами». Печаль-беда.

ilammy ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.