comparison utils.c @ 1901:bc5039adb9af libavcodec

1000l in av_mallocz_static() less overallocation in av_fast_realloc() for small arrays
author michael
date Mon, 22 Mar 2004 11:00:51 +0000
parents 5cde80c5d929
children 8d3540dddd1b
comparison
equal deleted inserted replaced
1900:5cde80c5d929 1901:bc5039adb9af
58 void *av_fast_realloc(void *ptr, unsigned int *size, unsigned int min_size) 58 void *av_fast_realloc(void *ptr, unsigned int *size, unsigned int min_size)
59 { 59 {
60 if(min_size < *size) 60 if(min_size < *size)
61 return ptr; 61 return ptr;
62 62
63 *size= min_size + 10*1024; 63 *size= 17*min_size/16 + 32;
64 64
65 return av_realloc(ptr, *size); 65 return av_realloc(ptr, *size);
66 } 66 }
67 67
68 68
69 static unsigned int last_static = 0; 69 static unsigned int last_static = 0;
70 static unsigned int allocated_static = 0; 70 static unsigned int allocated_static = 0;
71 static void** array_static = NULL; 71 static void** array_static = NULL;
72 static const unsigned int grow_static = 64; // ^2
73 72
74 /** 73 /**
75 * allocation of static arrays - do not use for normal allocation. 74 * allocation of static arrays - do not use for normal allocation.
76 */ 75 */
77 void *av_mallocz_static(unsigned int size) 76 void *av_mallocz_static(unsigned int size)
78 { 77 {
79 void *ptr = av_mallocz(size); 78 void *ptr = av_mallocz(size);
80 79
81 if(ptr){ 80 if(ptr){
82 array_static =av_fast_realloc(array_static, &allocated_static, last_static+1); 81 array_static =av_fast_realloc(array_static, &allocated_static, sizeof(void*)*(last_static+1));
83 array_static[last_static++] = ptr; 82 array_static[last_static++] = ptr;
84 } 83 }
85 84
86 return ptr; 85 return ptr;
87 } 86 }