макс. использование "кучи", позволенное для каждого процесса

На моем предыдущем рабочем месте мы использовали TeamCity. Это очень легко и способно использовать. Это может использоваться бесплатно с некоторыми ограничениями. Существует также учебное руководство на Броски Десяти центов . Причина мы не использовали CruiseControl.NET, состоит в том, что у нас было много маленьких проектов, и это довольно болезненно для установки каждого в CC.NET. Я настоятельно рекомендовал бы TeamCity. Чтобы подвести итог, если Вы находитесь к открытому исходному коду тогда, CC.NET является главным папой с кривой немного высшего образования. Если Ваш бюджет позволяет Вам, определенно идут с TeamCity или проверяют бесплатную версию.

7
задан Naveen 27 August 2009 в 18:22
поделиться

3 ответа

Предел памяти для каждого процесса составляет 2 ГБ (если вы не используете переключатель Windows / 3 ГБ ). Однако вы, вероятно, столкнулись с фрагментацией памяти. Когда память фрагментируется (визуализируйте с помощью VMMap ), вы не сможете выделить большой непрерывный блок. Возможны следующие варианты:

  • Распределить блоками меньшего размера (предпочтительно)
  • Найдите способ дефрагментировать память
  • Обновление до 64-разрядной ОС (вы все еще можете скомпилировать 32-разрядный код, но у вас будет до 4 ГБ для памяти пользовательского режима - не забудьте включить флаг компилятора с учетом большой памяти; если вы компилируете 64-разрядный код , он вообще не будет работать в 32-битной ОС, но лимит памяти намного превышает 4 ГБ)
  • Если вам нужно столько памяти для загрузки файла, вы можете отобразить файл в памяти.
  • Возможно, вы сможете выделить самые большие блоки раньше, чем меньшие блоки.
13
ответ дан 6 December 2019 в 11:50
поделиться

В 32-битной ОС Windows каждый процесс получает 4 ГБ виртуального адресного пространства, из которых 2 ГБ доступны для пользователя, а 2 ГБ - для ядра. Таким образом, любые выделенные ресурсы должны быть в пределах этих 2 ГБ. Обратите внимание, что эти 2 ГБ содержат другие вещи, такие как другие библиотеки DLL, которые загружаются вашим приложением, поэтому эта память фрагментирована. Когда вы выполняете malloc (), поскольку malloc гарантирует, что он возвращает непрерывный блок памяти, CRT попытается найти 1 ГБ постоянной свободной памяти, которая может быть недоступна, поэтому malloc () не работает. Один из способов решения этой проблемы - использовать файлы с отображением памяти и отобразить только часть необходимой памяти в ваше виртуальное адресное пространство.

2
ответ дан 6 December 2019 в 11:50
поделиться

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

Куда привязаны ваши dll и exes? Существует инструмент rebase.exe, который является частью структуры ms vc, который позволит вам перераспределить позицию, в которую загружена ваша dll или exe. Это может дать вам больше свободного места в виртуальной памяти, что позволит вам получить больше блоков памяти.

Параметр профиля «обходчик зависимостей» покажет вам, где находятся ваши dll и exe. загружаются в.

vmmap из sysinternals, чтобы лучше понять, как mwmory фрагментируется и обрабатывается.

2
ответ дан 6 December 2019 в 11:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: