Куча / стек и несколько процессов - PullRequest
1 голос
/ 23 декабря 2009

Скажем, у меня есть два процесса p1, p2, выполняющихся как часть моего приложения.

Скажем, p1 вначале работает, выполняя функцию f1 (), а затем f1 () вызывает f2 (). При вызове f2 () процесс p2 начинает вызывать

Я хочу подтвердить, что: 1) У нас есть отдельный стек для другого процесса?

2) У нас есть отдельная куча для другого процесса? или разные процессы используют одну и ту же кучу?

3) Поскольку мы знаем, что для 32-битной ОС для каждого процесса размер виртуальной памяти составляет 4 ГБ. Так что для каждого процесса, имеющего 4 ГБ в качестве виртуальной памяти, эти 4 ГБ разбиты на куча, стек, текст, данные

Спасибо.

Ответы [ 3 ]

5 голосов
/ 23 декабря 2009

1) Да, каждый процесс получает свой собственный стек.

2) Да, каждый процесс получает свою собственную кучу.

3) Я не думаю, что вы получите все 4 ГБ. Некоторые из них зарезервированы для ядра.

1 голос
/ 05 сентября 2012

Есть и другие ограничения, которые следует учитывать в Java, например, возможность адресовать массивы только с помощью Integer.MAX_VALUE. Это ограничивает вас до 2 ГБ во многих областях, связанных с памятью.

1 голос
/ 23 декабря 2009
  • Виртуальная память для процесса будет отличаться от других процессов.
  • Каждый процесс получит 4 ГБ виртуального адресное пространство (в 32-битных окнах машина) и из которых вы можете использовать 2 ГБ пользовательского пространства (осталось для ядро). Для стека, кучи, статического хранения данных и даже загрузки DLL. (Это 3 ГБ, если вы используете большое адресное пространство)
  • Каждый процесс получит отдельную кучу, стек не зависит от другого процесса.
...