Visual C++ 2010 (Express) 外部工具命令问题

Visual C++ 2010 (Express) 外部工具命令问题

通常我们在 VS 2005 Pro 中开发,但我想尝试一下 VS 2010。我们有基于 GNU make 工具的自定义构建工具,在创建可执行文件时会调用这些工具。

这是我每次调用外部工具时看到的错误:

...\gnu\make.exe): *** couldn't commit memory for cygwin heap, Win32 error 487

需要注意的是,它在 VS2005 中仍能完美运行,并且可以直接从命令行调用。另外,我的外部工具的设置与 VS 2005 中的设置完全相同。

是否存在某些设置可能会导致抛出此错误?

答案1

堆问题,win32 错误 487

每个 Cygwin 应用程序都有一个特殊的堆区域来保存子进程继承的内容。例如,所有文件描述符结构都存储在该堆区域(称为“cygheap”)。cygheap 至少有 4000 个文件描述符结构的空间。但是 - 这就是线索 - 它的大小是固定的。cygheap 不能增长。它的大小在应用程序启动时保留,并且它的块是按需提交的。

由于某种原因,您的服务器应用程序在所述条件下运行时需要所有的 cygheap 空间。

一个可能的解决方案可能是改变 Cygwin 的最大内存

Cygwin 的堆是可扩展的。但是,它一开始的大小是固定的,尝试扩展它可能会占用 Windows 先前分配的内存。在某些情况下,可以通过在注册表的 HKEY_LOCAL_MACHINE(更改所有用户的限制)或 HKEY_CURRENT_USER(仅针对当前用户)部分中添加条目来解决此问题。

添加 DWORD 值 heap_chunk_in_mb,并将其设置为所需的内存限制(以十进制 MB 为单位)。最好在 Cygwin 中使用 Cygwin 包中包含的 regtool 程序执行此操作。(有关 regtool 或其他 Cygwin 实用程序的更多信息,请参阅“Cygwin 实用程序”一节或使用每个实用程序的 --help 选项。)使用 regtool 时应始终小心,因为损坏系统注册表可能会导致系统无法使用。此示例将内存限制设置为 1024 MB:

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

退出所有正在运行的 Cygwin 进程并重新启动它们。最多可以分配系统交换空间大小减去任何正在运行的进程大小的内存。系统交换空间至少应与物理安装的 RAM 一样大,并且可以在控制面板的系统类别下进行修改。

确保 Windows 交换文件的最大大小足够大不会有什么坏处。

顺便问一下,您的计算机有多少 RAM?

答案2

也许这是版本的表现力与专业性的问题。你可以尝试专业版试用

相关内容