2014-02-02 10 views
0

Я пытаюсь узнать немного больше о виртуальных машинах и языках программирования в целом, реализуя некоторые вещи, которые есть в книгах. Книга, которую я сейчас просматриваю, хранит стек и кучу в одной области памяти. Стек растет вверх, а куча растет вниз. Я хотел бы знать, какие преимущества от этого отличаются, чем, может быть, более простая стратегия для операций загрузки/хранения, потому что вам не нужно различать две разные области памяти.Виртуальный дизайн машины с отдельным стеком и кучей

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

ответ

1

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

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

(...), потому что вам не нужно различать две разные области памяти.

Я полагаю, по областям памяти вы имеете в виду концепцию нескольких contigous пространств памяти, которые разделены таким образом, что каждый из них имеет диапазон адресов относительных показателей (0, ..., n) где п максимальное количество байт в этой области.

Это имеет большой смысл, если у вас есть virtual memory, то есть процессор реализует слой поверх физической памяти, что дает программам иллюзию каждого из них, имеющих отдельное, смежное пространство памяти.

1

На старых машинах с ограниченной памятью и без виртуальной памяти две секции памяти представляли два противоположных конца свободного пространства машины. Если у вас есть 48k непрерывного пространства, один конец - стек, растущий вверх, а другой - куча, растущая вниз. В конце концов они сталкиваются, и вы «не в памяти».

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

Также, конечно, сегодня с виртуальными машинами вы можете управлять исполнением, а в стеке - (или даже область кучи). На самом деле это не проблема на более старых, более старых машинах в прошлом.