1

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

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

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

+0

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

ответ

0

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

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

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

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^