Проблема с командой (Express) External Tools Visual C++ 2010 года

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

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

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

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

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

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

1
задан the_e 9 June 2010 в 17:24
поделиться

2 ответа

Из проблема с кучей, ошибка 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 список / HKLM / Программное обеспечение / Cygwin

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

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

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

1
ответ дан 2 September 2019 в 23:53
поделиться

Из списков электронной почты cygwin email lists похоже, что другие люди сталкивались с подобными ситуациями, даже при запуске не через 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 не позволяет системе запустить процесс (64bit), а 2010 обрабатывает его сама (32bit)).

1
ответ дан 2 September 2019 в 23:53
поделиться
Другие вопросы по тегам:

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