【发布时间】:2016-04-03 01:05:03
【问题描述】:
我有一个测试程序。我在 ubuntu 可信赖的 64 位中执行它时得到这个结果。
malloc 时间:9571
静态时间:45587
为什么 malloc 比静态内存分配快,还是我的测试程序有问题?
测试程序是这样的。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/time.h>
#define TIME 10000
int data[1024] = { 1,2,3,4,5,6,6,7,8,5,4,3,2,3 };
int st[TIME][1024];
int main(void) {
int i = 0;
int time = 0;
struct timeval tv1,tv2;
/* test for malloc */
memset(&tv1,0,sizeof(tv1));
memset(&tv2,0,sizeof(tv2));
gettimeofday(&tv1,NULL);
for(i=0;i<TIME;i++) {
void * p = malloc(4096);
memset(p,0,4096);
memcpy(p,data,sizeof(data));
free(p);
p = NULL;
}
gettimeofday(&tv2,NULL);
time = ((tv2.tv_sec - tv1.tv_sec) * 1000000 +
(tv2.tv_usec - tv1.tv_usec));
printf("malloc time:%d\n",time);
/* test for static memory allocation */
memset(&tv1,0,sizeof(tv1));
memset(&tv2,0,sizeof(tv2));
gettimeofday(&tv1,NULL);
for(i=0;i<TIME;i++) {
memset(st[i],0,4096);
memcpy(st[i],data,sizeof(data));
}
gettimeofday(&tv2,NULL);
time = ((tv2.tv_sec - tv1.tv_sec) * 1000000 +
(tv2.tv_usec - tv1.tv_usec));
printf("static time:%d\n",time);
return 0;
}
【问题讨论】:
-
尝试使用 free() 调用重复您的测试。
-
@AndréPuel 我猜你的意思是“没有”
-
首先要做的是检查汇编代码,看看发生了什么。编译器可以优化这两个测试,因为它们没有可观察的行为。
-
st是 40MB,p指向 4KB。如果你真的想测试malloc与静态内存,你要么需要 malloc 40MB,要么需要让st4KB。 -
@M.M 当没有free()调用时,malloc时间为39129,静态时间为45362。可能是malloc重复使用同一段内存
标签: c linux performance memory-management x86-64