Достаточно ли похоже управление памятью на разных языках для передачи моих знаний? - PullRequest
4 голосов
/ 17 июня 2009

Я только начинаю изучать программирование. И на данный момент я знаю немного об управлении памятью в Objective-C. Это было нелегко изучить.

Итак, просто из любопытства, каким образом управление памятью используется в основных языках, таких как C, C ++, Java и т. Д., Как-то похоже на то, что я выучил?

Ответы [ 6 ]

14 голосов
/ 17 июня 2009

Управление памятью осуществляется в двух разных вариантах: неуправляемое и управляемое.

Неуправляемый - это C / C ++, где программист отвечает за распределение памяти.

Управляемый аналогичен Java / .Net, где вам выделяется память, но очищается виртуальной машиной («сборщик мусора»).

В этих двух ароматах вы найдете множество вариаций.

3 голосов
/ 17 июня 2009

Нет, это другое.

В языках Java и .NET существует концепция автоматического управления памятью, которая включает сборщики мусора. Реализация сборщиков мусора снова варьируется от языка к языку и от платформы к платформе.

C / C ++ не имеет автоматического управления памятью, и ответственность за управление памятью лежит на самих программистах.

Короче говоря, он отличается для разных языков.

3 голосов
/ 17 июня 2009

Нет, он может значительно различаться для разных платформ - и даже в пределах одной и той же платформы могут быть разные варианты. (например, в C ++ вы можете использовать автоматические указатели, Boehm GC и т. д.)

Java и .NET имеют в основном аналогичное управление памятью, заметьте.

0 голосов
/ 17 июня 2009

Подходы к управлению памятью сильно различаются для разных языков и платформ, причем не только по уровню видимости и контроля программиста, но и по реализации.

Несмотря на это, основы выделения и освобождения памяти примерно одинаковы, когда вы переходите на уровень ОС. Конечно, есть различия, настройки и оптимизации, но обычно программисту не приходится иметь дело с такими деталями.

Objective-C является интересным гибридом, поскольку в версии 2.0 добавлена ​​дополнительная сборка мусора, но также сохраняется возможность использовать подсчет ссылок (retain / release / autorelease). Фактически, один и тот же код может выполняться в любом режиме в зависимости от флагов компиляции и настроек другого кода, загруженного в том же процессе. Это нетипично для языков программирования - обычно вы получаете либо управляемый (автоматический), либо неуправляемый (ручной) код на основе написанного вами кода, а иногда язык / платформа вообще не предоставляет возможности выбора (например, Java).

Один вкус не обязательно лучше, чем другой, и до сих пор все еще случаются религиозные споры о том, «используют ли настоящие программисты сборщик мусора», но не слишком переживайте по этому поводу. Общие знания о том, как различные подходы к управлению памятью никогда никому не вредят, и, как правило, достаточно понять подход к языку (языкам), на которых вы кодируете.

0 голосов
/ 17 июня 2009

G'day,

Единственное, что вы можете сказать, что похоже на управление памятью на разных языках, это цели. А именно:

  • предоставляет фиксированный кусок памяти для процесса воспроизведения,
  • защита памяти вне этого чанка от доступа к процессу,
  • обеспечивает динамический механизм выделения для переменных / объектов / функций / и т. Д. в процессе
  • гарантирует, что выделение памяти для этих элементов выполняется на разумных границах, разумных с точки зрения процессора,
  • предоставляет механизм для освобождения памяти при необходимости,
  • очистить (собрать мусор) неиспользуемые объекты,
  • объединяет фрагментированную память в непрерывные пулы занятой памяти,
  • и т.д.

Различные языки и среды выполнения предоставляют механизмы для реализации хотя бы некоторых из этих функций.

НТН

ура

0 голосов
/ 17 июня 2009

Я не знаю, как управлять памятью в target-c, но C и C ++ используют ручное управление памятью, а в Java встроена сборка мусора, и она не позволяет ручное управление памятью. Так что они очень разные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...