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

#object #memory #memory-management #operating-system #procedural-programming

#объект #память #управление памятью #операционная система #процедурное программирование

Вопрос:

Я хочу понять, чем языки программирования ООП отличаются от процедурных языков с точки зрения использования памяти. Чтобы быть более конкретным, давайте предположим, что мы говорим о Java и C в качестве примеров:

  1. Правда ли, что объекты автоматически сохраняются в heap то время как в процедурных языках вы должны явно определять использование кучи, например, в C malloc ?
  2. Если я напишу программу на C, OS создам виртуальную страницу этой программы, включая пространства кучи и стека. Если я не использую malloc в своем коде, это означает, что моя программа не использует выделенную для нее кучу, это правильно?
  3. Поскольку Stack используется для хранения локальных переменных и адресов вызовов функций, что, если программе не хватает места в стеке, OS увеличивает размер страницы этой программы или просто использует кучу в качестве расширения?

Комментарии:

1. Не могли бы вы уточнить, о каких языках вы говорите? Трудно сделать общие утверждения обо всех императивных языках или всех объектно-ориентированных языках. Например, C является основным контрпримером к нескольким приведенным выше утверждениям.

2. Спасибо.. Я обновил свой вопрос

Ответ №1:

Правда ли, что объекты автоматически сохраняются в куче, в то время как в процедурных языках вы должны явно определять использование кучи, например, в C malloc?

Это зависит от языка. Некоторые, такие как Object Pascal, требуют, чтобы все «объекты» были размещены в куче. Другие, такие как C , позволяют объектам существовать в статике, куче или стеке. У обоих подходов есть преимущества и недостатки.

Если я напишу программу на C, ОС создаст виртуальную страницу этой программы, включая пространства кучи и стека. Если я не использую malloc в своем коде, это означает, что моя программа не использует выделенную для нее кучу, это правильно?

Вероятно, нет. Вероятно, библиотека времени выполнения будет использовать кучу за вашей спиной.

Поскольку стек используется для хранения локальных переменных и адресов вызовов функций, что делать, если программе не хватает места в стеке, увеличивает ли ОС размер подкачки этой программы или она просто использует кучу в качестве расширения?

Это зависит от операционной системы. Как правило, ОС будет пытаться расширить стек, если сможет. t не будет использовать кучу для расширения стека. Стеки обычно защищены недоступной страницей на обоих концах (например, первой страницей для перехвата нулевых указателей). Вероятным результатом исчерпания стека является какое-то нарушение доступа.