Проблема с командой внешних инструментов Visual C ++ 2010 (Express) - PullRequest
1 голос
/ 09 июня 2010

Я разместил это на SuperUser ... но я надеялся, что у профессионалов в SO, возможно, есть хорошая идея о том, как это тоже исправить ...

Обычно мы разрабатываем в VS 2005 Pro,но я хотел дать VS 2010 спин.У нас есть собственные инструменты сборки, основанные на GNU make, которые вызываются при создании исполняемого файла.

Это ошибка, которую я вижу, когда вызываю свой внешний инструмент:

... \ gnu\ make.exe): *** не удалось зафиксировать память для кучи cygwin, ошибка Win32 487

Предостережение заключается в том, что он все еще прекрасно работает в VS2005, а также вызывается прямо из командной строки.Кроме того, мой внешний инструмент настроен точно так же, как и в VS 2005.

Есть ли где-нибудь настройки, которые могут вызвать эту ошибку?

Ответы [ 2 ]

1 голос
/ 18 июня 2010

С проблема с кучей, ошибка win32 487 :

Каждое приложение Cygwin получает специальную кучу область для хранения вещей, которые наследуются дочерним процессам. Например. весь файл структуры дескрипторов хранятся в эта область кучи (называемая "cygheap"). В cygheap есть место как минимум на 4000 структуры файловых дескрипторов. Но - это ключ - это фиксированный размер. Cygheap не может расти. Это размер зарезервировано в начале приложения и это блоки переданы на спрос.

Почему-то ваш сервер приложению нужен весь cygheap пространство при работе под описанным условия.

Возможное решение может быть найдено в Изменение максимальной памяти Cygwin :

Куча Cygwin расширяема. Тем не мение, он начинается с фиксированного размера и попытки продлить его могут натолкнуться на память, которая была ранее выделено Windows. В некоторых случаях, эту проблему можно решить, добавив запись в либо HKEY_LOCAL_MACHINE (чтобы изменить ограничение для всех пользователей) или HKEY_CURRENT_USER (только для текущий пользователь) раздел реестра.

Добавить значение DWORD heap_chunk_in_mb и установите желаемый предел памяти в десятичных МБ. Предпочтительнее делать это в Cygwin, используя regtool Программа включена в Cygwin пакет. (Для получения дополнительной информации о regtool или другие утилиты Cygwin, см. раздел «Cygwin» Утилиты »или используйте опцию --help каждый утилит.) Ты всегда должен быть осторожны при использовании regtool, так как повреждение вашего системного реестра может привести к непригодной для использования системе. это пример устанавливает ограничение памяти в 1024 МБ:

regtool -i set /HKLM/Software/Cygwin/heap_chunk_in_mb 1024
regtool -v list /HKLM/Software/Cygwin

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

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

Подводя итог: среда не выделяет достаточно места в куче для исполняемых файлов cygwin. По какой-то причине проблема более остро стоит с VS2010 Express. Вам нужно либо исправить среду, либо использовать другой порт Linux, чем Cygwin, либо использовать утилиты Microsoft.

1 голос
/ 17 июня 2010

Из списков адресов электронной почты cygwin похоже, что другие люди сталкивались с подобными ситуациями, даже если они не запускались через Visual Studio, и обнаружили, что решение часто заключается в том, чтобы играть с максимальной памятью Cygwin.настройки:

http://www.cygwin.com/cygwin-ug-net/setup-maxmem.html

(примечание: стоит прочитать этот разговор сверху, о некоторых значениях, которые работали и не работали).

Другие также сообщали о проблемах с программным обеспечением Антивируса (по какой-то причине рекомендуется выгрузить из памяти), а также, возможно, также о настройках совместимости (попробуйте установить XP), что в некоторых случаях может повлиять на Cygwin.См .: http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&p=377066

Что касается Visual Studio: вы работаете на 64-битной машине, и если да, то обычно ли вы запускаете инструмент в 64-битной среде?

Я обнаружил, что поскольку Visual Studio 2010 работает в 32-битной среде, инструменты, запускаемые из него, запускаются как 32-битные процессы (для хорошей иллюстрации добавьте «cmd» в качестве инструмента).Я не уверен, почему это не будет затронуто в 2005 году (если 2005 не позволит системе запустить процесс (64-битный), а 2010-й сам его обработает (32-битный)).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...