计算C中结构分配的内存空间
我想知道是否有一种方法可以计算某个函数调用或程序前后的内存空间。。。类似于计算执行时间的时间戳 我问这个问题是因为我想测试我的代码在内存空间方面的性能,因为我使用的是计算C中结构分配的内存空间,c,memory,trie,C,Memory,Trie,我想知道是否有一种方法可以计算某个函数调用或程序前后的内存空间。。。类似于计算执行时间的时间戳 我问这个问题是因为我想测试我的代码在内存空间方面的性能,因为我使用的是树数据结构。。。我需要在辩护中陈述我的项目在某些方面的表现 我正在使用windows,它可能是特定于平台/编译器的。在unix/Linux/etc中,可以使用sbrk(0)查找内存的末尾 #include <stdio.h> #include <stdlib.h> #include <unistd.h&
树
数据结构。。。我需要在辩护中陈述我的项目在某些方面的表现
我正在使用windows,它可能是特定于平台/编译器的。在unix/Linux/etc中,可以使用
sbrk(0)
查找内存的末尾
#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;
}
它可能是特定于平台/编译器的。在unix/Linux/etc中,可以使用
sbrk(0)
查找内存的末尾
#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;
}
要计算名为
foo
的结构所使用的字节,可以使用sizeof(struct foo)
POSIX.1说您可以打电话了解您使用了多少内存
许多C实现将允许您调用以获取当前的“内存顶部”地址
在Windows上,您可以使用
其他平台可能有类似于这些的其他调用,但如果所有其他调用都失败,您可以将
malloc()
和free()
包装为跟踪您感兴趣的数据使用情况的版本。要计算名为foo
的结构所使用的字节,您可以使用sizeof(struct foo)
POSIX.1说您可以打电话了解您使用了多少内存
许多C实现将允许您调用以获取当前的“内存顶部”地址
在Windows上,您可以使用
其他平台可能有类似于这些的其他调用,但如果所有其他调用都失败,您可以使用跟踪您感兴趣的数据使用情况的版本来包装
malloc()
和free()
。为free
,malloc
打包,等等。跟踪分配?你试过使用valgrind吗?什么操作系统?你的问题的答案是特定于操作系统的,我认为免费
,malloc
,等等的包装。跟踪分配?你尝试过使用valgrind吗?什么操作系统?你的问题的答案是操作系统特有的,我想我理解的是,如果我在函数执行之前使用GetProcessMemoryInfo(),然后在函数执行之后使用GetProcessMemoryInfo(),那么我就会知道函数使用了多少内存;内存将有12个值,因为t的类型为struct typedef struct{int size;int num_nodes;//trie trie_node*root;}trie中的节点数;t中的大小值为4578这是int trie_create(trie*t){memset(t,'\0',sizeof(trie));返回trie_SUCCESS;}它可能有12个;在32位平台上可能会这样,但在64位平台上不会这样。在计数器中为trie\u create()
函数使用sizeof()是可移植的,并且可能是您想要的。我的理解是,如果我在函数执行之前使用GetProcessMemoryInfo(),然后在函数执行之后使用GetProcessMemoryInfo(),那么我将知道函数使用了多少内存?如果我编写了memory=sizeof(t);内存将有12个值,因为t的类型为struct typedef struct{int size;int num_nodes;//trie trie_node*root;}trie中的节点数;t中的大小值为4578这是int trie_create(trie*t){memset(t,'\0',sizeof(trie));返回trie_SUCCESS;}它可能有12个;在32位平台上可能会这样,但在64位平台上不会这样。在计数器中为trie\u create()
函数使用sizeof()是可移植的,可能是您想要的。