plustilino
@plustilino
https://younglinux.info

Динамические структуры. Обязательна ли процедура dispose()?

В учебнике по языку Pascal процедура удаления элемента из стека описана так:

Procedure ReadStack(var u: pt; var dig: integer);
    var x: pt;
    begin
        dig := u^.Data;      // извлекаются данные из верхнего элемента стека
        x := u;              // сохраняется ссылка на верхний элемент
        u := u^.Next;        // вершиной стека становится следующий элемент
        Dispose(x);          // очищается память из под извлеченного элемента
    end;



Почему нельзя сделать проще?
Procedure ReadStack(var u: pt; var dig: integer);
    begin
        dig := u^.Data;     // извлекаются данные из верхнего элемента стека
        u := u^.Next;       // вершиной стека становится следующий элемент
    end;



1) Т.е. в Pascal отсутствие ссылок на участок памяти, не освобождает ее?

2) Это и есть пример отсутствия так называемого «механизма автоматической сборки мусора»?

3) Получается, в этом смысле Си отличается от Паскаля; в первом мусор собирается автоматически?
  • Вопрос задан
  • 2818 просмотров
Пригласить эксперта
Ответы на вопрос 2
TheHorse
@TheHorse
1) В паскале нет GC и встроенных умных ссылок, и отсутствие ссылок ничего не изменяет.
2) Да.
3) Нет, в С мусор не собирается автоматически.
Ответ написан
Комментировать
foxmuldercp
@foxmuldercp
Системный администратор, программист, фотограф
GC точно встроен в C#, и судя по всему в остальные .Net языки, хотя я точно не уверен
Я считаю это хорошим тоном, даже если это в ЯП не используется, возможно за этим также следит ОС, я не профессионал, поэтому точно сказать не могу. Когда на C# я писал пакетную ресайзилку изображений, после того, как в процедуру ResizeImage (стыренную откудато из сети) в конце после формирования преобразованного image, я воткнул Image.Dispose(), отжирание памяти сократилось на 100-200 метров.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы