如何在C中修复我的应用程序的内存大小?

时间:2009-06-19 06:24:20

标签: c

我想为我的应用程序分配一个固定内存(使用C开发)。说我的应用程序不应该跨越64MB的内存占用。而且我应该避免使用更多的CPU使用率。怎么可能?

此致 烫发。

5 个答案:

答案 0 :(得分:4)

在unix下:“ulimit -d 64M”

答案 1 :(得分:3)

我可以确保在应用程序中不超过最大内存阈值的一种相当低技术的方法是定义自己的特殊malloc()函数,该函数可以计算已分配的内存量,并返回如果已超过阈值,则为NULL指针。这当然要依赖于你每次调用它时检查malloc()的返回值,这通常被认为是一种好的做法,因为无法保证malloc()会找到一个连续的内存块。您要求的尺寸。

虽然这不是万无一失的,因为它可能不会考虑字对齐的内存填充,所以你可能最终会在函数报告到达之前达到64MB内存限制。< / p>

此外,假设您使用的是Win32,可能会使用API​​来获取当前进程大小,并在自定义malloc()函数中进行检查。请记住,将这种检查开销添加到代码中很可能会导致它使用更多的CPU并且运行速度比正常情况慢得多,这很好地引导到下一个问题:)

  

而且我应该避免使用更多   CPU使用率。

这是一个非常普遍的问题,没有简单的答案。您可以编写两个基本上执行相同操作的不同程序,由于已使用的算法,一个程序可能比另一个程序的CPU密集程度高100倍。最好的技术是:

  1. 设置一些性能基准。
  2. 编写程序。
  3. 测量是否达到基准。
  4. 如果未达到基准,请进行优化,然后转到步骤(3)。
  5. 您可以使用性能分析程序来帮助您确定需要优化算法的位置。 Rational Quantify是一个商业化的例子,但也有许多免费的剖析器。

答案 2 :(得分:3)

如果您使用的是POSIX,System V或BSD派生系统,则可以将setrlimit()与资源RLIMIT_DATA一起使用 - 类似于ulimit -d

另请查看RLIMIT_CPU资源 - 这可能就是您需要的内容(类似于ulimit -t

查看man setrlimit了解详情。

答案 3 :(得分:1)

对于CPU,我们有一个非常低优先级的任务(低于其他任何东西)除了计数之外什么都不做。然后,您可以看到该任务运行的频率,并且您知道其余进程是否消耗了太多CPU。如果您希望在其他进程运行时将进程限制为10%,则此方法不起作用,但如果您希望确保50%的CPU空闲,那么它可以正常工作。

对于内存限制,您要么在malloc之上实现自己的层,要么以某种方式利用您的操作系统。在Unix系统上,ulimit是你的朋友。在VxWorks上,我打赌你可能想出一种方法来利用任务控制块来查看应用程序正在使用多少内存......如果还没有这个功能。在Windows上,您至少可以设置一个监视器来报告您的应用程序是否超过64 MB。

另一个问题是:你做了什么回应?如果超过64Mb,您的应用程序是否会崩溃?您是否希望这只是作为帮助您限制自己的指南?这可能会在选择“强制执行”方法与“监控和报告”方法之间产生差异。

答案 4 :(得分:0)

嗯;好问题。我可以看到如何使用malloc和free的自定义版本为堆分配的内存执行此操作,但我也不知道在堆栈上强制执行它。

管理CPU更难......

有趣。