#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
int main(int argc, char **argv)
{
struct timeval start,stop,diff;
int i = 0;
gettimeofday(&start,0);
for( i = 0; i < 10000000; i++){
char a[1024*3] = {0};
//char * a = (char *)malloc(1024*3);
//free(a);
}
gettimeofday(&stop,0);
tim_subtract(&diff,&start,&stop);
printf("ret:%dms\n",diff.tv_usec);
}
int tim_subtract(struct timeval *result, struct timeval *x, struct timeval *y)
{
int nsec;
if ( x->tv_sec > y->tv_sec )
return -1;
if ((x->tv_sec==y->tv_sec) && (x->tv_usec>y->tv_usec))
return -1;
result->tv_sec = ( y->tv_sec-x->tv_sec );
result->tv_usec = ( y->tv_usec-x->tv_usec );
if (result->tv_usec<0)
{
result->tv_sec--;
result->tv_usec+=1000000;
}
return 0;
#include <stdlib.h>
#include <sys/time.h>
int main(int argc, char **argv)
{
struct timeval start,stop,diff;
int i = 0;
gettimeofday(&start,0);
for( i = 0; i < 10000000; i++){
char a[1024*3] = {0};
//char * a = (char *)malloc(1024*3);
//free(a);
}
gettimeofday(&stop,0);
tim_subtract(&diff,&start,&stop);
printf("ret:%dms\n",diff.tv_usec);
}
int tim_subtract(struct timeval *result, struct timeval *x, struct timeval *y)
{
int nsec;
if ( x->tv_sec > y->tv_sec )
return -1;
if ((x->tv_sec==y->tv_sec) && (x->tv_usec>y->tv_usec))
return -1;
result->tv_sec = ( y->tv_sec-x->tv_sec );
result->tv_usec = ( y->tv_usec-x->tv_usec );
if (result->tv_usec<0)
{
result->tv_sec--;
result->tv_usec+=1000000;
}
return 0;
}
测试结果:
当i=10:
栈耗时:2ms
堆耗时:37ms
堆>栈
当i=100:
栈耗时:10ms
堆耗时:50ms
堆>栈
当i=1000:
栈耗时:100ms
堆耗时:91ms
堆<栈
当i=10000:
栈耗时:1015ms
堆耗时:634ms
堆<栈
当i=100000:
栈耗时:10782ms
堆耗时:6338ms
堆<栈
当i=1000000:
栈耗时:113438ms
堆耗时:63208ms
堆<栈
当i=10000000:栈耗时:307123ms
堆耗时:618806ms
堆>栈
推测:过于频繁的malloc对系统的性能影响还是很大的