计算C中结构分配的内存空间

时间:2013-04-27 12:25:39

标签: c memory trie

我想知道是否有办法计算某个函数调用或程序之前和之后的内存空间......类似于计算执行时间的时间戳......

我问这个是因为我想测试我的代码有关内存空间的性能,因为我使用的是tree数据结构......我需要在我的辩护中提出我的项目的性能关于某些方面...

我正在使用Windows

2 个答案:

答案 0 :(得分:4)

要计算名为foo的结构使用的字节,您可以使用sizeof(struct foo)

POSIX.1表示你可以调用getrusage()来查看你正在使用多少内存。

许多C实现都允许您调用sbrk(0)来获取当前内存的顶部"地址。

在Windows上,您可以使用GetProcessMemoryInfo()

其他平台可能有其他类似的调用,但如果其他所有调用都失败,您可以将malloc()free()包含在跟踪您感兴趣的数据使用情况的版本中跟踪。

答案 1 :(得分:3)

它可能是特定于平台/编译器的。在unix / Linux / etc中,您可以使用sbrk(0)查找内存的 end

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main() {
    char *start, *data, *end;
    start = sbrk(0);
    printf("%p\n", start);
    data = malloc(243);
    end = sbrk(0);
    printf("%p\n", end);
    printf("diff: %ld", (long)(end - start));
    return 0;
}

输出(Cygwin):

0x80020000
0x80050000
diff: 196608