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

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

关心马塞尔。

在unix下:“ulimit -d 64M”

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

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

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

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

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

  1. 设置一些性能基准。
  2. 写你的程序。
  3. 测量是否达到您的基准。
  4. 如果没有达到您的基准,请进行优化并转到步骤(3)。

您可以使用性能分析程序来帮助您确定需要优化算法的位置。 Rational Quantify是一个商业化的例子,但也有许多免费的剖析器。

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

另外看一下RLIMIT_CPU资源 – 它可能就是你所需要的(类似于ulimit -t

查看man setrlimit了解详情。

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

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

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

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

管理CPU更难…

有趣。