2015-02-28 2 views
1

У меня есть программа, которая имеет 4 проекта в качестве зависимости для этого (это означает, что она должна загружать 4 DLL для запуска этой программы). Она выделяет 4 ячейки памяти или только 1 стек памяти будет выделен для всей программы и сколько будет выделено размер памяти стека для программы?Сколько ячеек памяти будет выделено программе

ответ

3

Все зависит от этого! Ваши проекты могут быть независимыми приложениями или библиотеки:

  • Независимые приложения имеют свои собственные стек
  • библиотеки будут связаны с приложением и не имеют свой собственный стек

библиотеки DLL являются найти библиотеки, которые являются динамически связаны, поэтому они следуют принципу библиотек и don't have their own stack.

Приложения, однако, могут иметь несколько потоков (и, например, функции запуска, отображаемые в библиотеках в разных потоках). Каждая нить имеет свой own stack.

С Windows в заголовке исполняемого файла указан default stack size. Размер резервирования стека по умолчанию, используемый компоновщиком, составляет 1 МБ. Посмотрите на это SO question для стандартных значений стека для других ОС.

Обратите внимание, что количество потоков в программе динамическое: ваша программа может в любое время использовать стандартную библиотеку C++ или вызовы ОС для их создания или завершения. Но если ваш код использует это, вы заметите. То же самое относится к процессам, если ваше приложение запускает некоторые.

+0

Спасибо за ценный ответ. У меня есть еще один вопрос. Сколько памяти max можно выделить для глобальных переменных. Я знаю, что глобальные и статические переменные хранятся в сегментах данных, но этот сегмент имеет фиксированную память, например stack.Can мы объявляем массив глобальных переменных с большим объемом памяти? – krish

+0

Это зависит от того, если для win32 (2 ГБ, 4 ГБ, если скомпилировано с/LARGEADDRESSAWARE и работает на 64-битных окнах) или для x64 (8TB), см. Здесь: https://msdn.microsoft.com/en-us/magazine/cc300794.aspx , Эта память представляет собой полное адресное пространство = (статическое + глобальное) + стек + куча + программный код. Эта статья может вас заинтересовать и для общего понимания: http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory/ – Christophe

+0

Спасибо за полезную информацию :) – krish

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