2

有没有办法知道我的 C 代码的内存需求?例如,我制作了int arrey[1000]. 那么运行时它将在RAM中消耗多少内存,我可以用任何代码/工具知道它而不手动计算它吗?(系统:Ubuntu)

编辑:就像知道我们可以给时间一样的时间 ./a.out 这将为程序提供完美的时间。

4

8 回答 8

3

您可以启动程序,同时在不同的终端窗口中,键入

top

这将为您提供有关系统上正在运行的信息:CPU 使用率、内存、用户、时间......

于 2012-10-22T17:09:43.380 回答
1

要找到数组的内存需求,您可以使用sizeof函数找到整个数组的大小:

cout << "bytes used: " << sizeof(arrey) << endl;

要找到每个元素的内存:

cout << "byte per element: " << sizeof(int) << endl;
于 2012-10-22T17:10:21.100 回答
1

如果你有代码并且你已经编译了它,你可以使用valgrind . 此控制台工具将打印堆摘要,以及由于内存失败而分配的内存丢失了多少以及它们在代码中的位置。

于 2012-10-22T17:42:09.907 回答
0

使用以下 Linux 命令获取有关系统内存使用情况的统计信息:

$ free
...
$ cat /proc/meminfo
...
于 2012-10-22T17:08:56.420 回答
0

使用ps命令,您可以获得进程分配的内存页数。它不是一个完美的索引;如果您想要更精确,请使用内存分析器,例如gperftools

于 2012-10-22T17:10:34.600 回答
0

只需使用 sizeofcout<<sizeof(arrey);

于 2012-10-22T17:11:30.100 回答
0

从您自己的应用程序内部,您可以阅读 (sequentially)/proc/self/statm等。在proc(5)手册页中/proc/self/maps阅读有关/proc文件系统的更多信息。

(通过对 C 源代码的静态分析来限制内存消耗通常是难以处理或不可能的)

于 2012-10-22T19:14:49.470 回答
-3

1000 * 4 = 4000,在堆栈上。

于 2012-10-22T17:10:37.813 回答