假设我有一个c程序,我只使用堆栈变量,没有动态变量(malloc,...)
是否可以计算我的程序在运行时将占用多少内存?
答案 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时间或内存。