如何计算程序的内存大小?

时间:2009-11-03 05:01:57

标签: c memory variables stack size

假设我有一个c程序,我只使用堆栈变量,没有动态变量(malloc,...)

是否可以计算我的程序在运行时将占用多少内存?

6 个答案:

答案 0 :(得分:1)

它不仅取决于此处所述的操作系统和编译器。

通常无法事先确定它。

例如,如果您使用递归调用,则必须知道这些调用的参数,并且最终会出现非常复杂的计算,如果某些参数依赖于用户输入或其他不可预测的事情,则无法提前进行

当然你可以做出一些最糟糕的情况,但一般来说,大多数问题的上限是无限的。

因此,只有当您的程序非常简单和线性时,您才能这样做。

答案 1 :(得分:0)

是的,但这样做的方法取决于操作系统。您定位的平台是什么?

答案 2 :(得分:0)

是 - 根据您的编译器/ os,您放在堆栈上的每个对象都有一个大小(例如int - 4个字节但它从编译器到编译器以及从os到os) - 您可以在运行时使用sizeof来查找你放在堆栈上的大小。 最终,程序的szie将是代码的大小+您创建的堆栈的大小。 (找到代码的大小更难,但你可以加载程序并在任务管理器中查看需要多少,如果你在窗口,这应该给你一些估计)。 我认为top会在linux上做到。

答案 3 :(得分:0)

如果是FC9等Linux,请参阅/ proc / [PID] / maps,例如:

cat /proc/2738/maps

这才有意义

答案 4 :(得分:0)

它还取决于您的通话跟踪的深度。 (您是否正在使用递归函数等等。)此外,您的操作系统可以增加堆栈吗?

答案 5 :(得分:0)

有CPU和内存分析工具可帮助您查找程序在运行时花费的CPU时间或内存。