系统C命令和内存限制?

时间:2009-09-30 18:23:20

标签: c system

好的,我正在尝试调试win2003服务器上的问题。基本上我们有一个古老的程序,它调用C的system()函数。现在我基本上跟踪了系统()运行应用程序时的事实。该应用程序只能访问大约500兆字节的内存。然而,如果我自己手动运行应用程序,它运行正常。

系统命令和内存是否存在某种限制因素?

编辑

好的详细说明。我们有一个自动处理系统,它基本上接受一个输入文件并在其上运行一堆应用程序。这在过去12年左右的时间里运作良好。但现在我们正在使用ArcEngine(ESRI图像处理)处理越来越大的图像(遥感)。现在我们基本上有以下内容:

输入文件进来 - >由处理系统获取 - >通过调用system()一个接一个地执行一组预定义任务。

现在谈到ESRI应用程序系统时,程序在尝试将图像读入内存时崩溃。我无法通过部分读取图像文件来做任何事情,因为这是他们的sdk的工作方式。此外,我只是通过创建一个简单的简单C程序进行测试,该程序强制分配内存并查看它何时崩溃。它几乎完全崩溃了512MB左右。我在互联网上环顾四周,找不到任何东西。 = / ...

编辑2

我刚做了一些时髦的测试。我基本上写了一个小的C程序,通过system()调用应用程序。并称之为,它在完全相同的地方崩溃。当我调用这个程序时,系统有2.5GB可用内存(满分为3)。然后我基本上编写了一个使用subprocess和popen的python脚本,它运行正常。将python脚本添加到自动处理系统也可以正常运行。

有什么可能这样做?

编辑3

Python脚本和处理系统都以同一个用户身份运行。唯一的区别是处理系统作为服务运行,以用户身份登录。

2 个答案:

答案 0 :(得分:2)

如果你手动运行程序 - 在自动处理系统之外,你说程序运行正常。您是否可以修改程序,以便在系统处理映像时定期显示可用内存量?如果在第一次调用SDK之前获得了可用内存值,则可以确定SDK在处理映像时使用了多少内存。如果结果超过512 MB(或任何限制),那么您就知道问题在于SDK需要的内存比您可用的内存多。

如果你不能进入图像处理,你需要创建一个定期显示可用内存量的定时器proc。

答案 1 :(得分:1)

msdn上使用系统时,没有提及对衍生过程的任何内存限制。

系统调用返回了哪个错误代码?内存不足返回码为ENOMEM (12)

但需要注意的一点是,系统的使用已弃用,请尝试使用CreateProcess运行它。

编辑:要检查的另一件事是执行此应用程序的权限级别。应用程序是否与您运行它的用户运行相同的用户?

Edit2:您可能还想检查Windows Job Objects,因为它可以用来限制给定作业组的内存使用量。