@@ -82,7 +82,9 @@ int calculate_total_overhead(int num_buckets) {
8282}
8383
8484/* Function to parse memory allocation logs with concurrent usage tracking */
85- int parse_memory_logs (const char * filename , AllocSize * alloc_sizes , int * num_sizes , int * peak_heap_usage ) {
85+ int parse_memory_logs (const char * filename , AllocSize * alloc_sizes ,
86+ int * num_sizes , int * peak_heap_usage )
87+ {
8688 FILE * file = fopen (filename , "r" );
8789 if (!file ) {
8890 printf ("Error: Could not open file %s\n" , filename );
@@ -298,8 +300,7 @@ void optimize_buckets(AllocSize* alloc_sizes, int num_sizes, int* buckets,
298300 }
299301 }
300302
301- /* Use actual concurrent usage, but minimum of 1 */
302- dist [* num_buckets ] = (largest_concurrent > 0 ) ? largest_concurrent : 1 ;
303+ dist [* num_buckets ] = largest_concurrent ;
303304 (* num_buckets )++ ;
304305
305306 /* Add significant allocation sizes, considering padding overhead */
@@ -357,24 +358,10 @@ void optimize_buckets(AllocSize* alloc_sizes, int num_sizes, int* buckets,
357358 }
358359 }
359360
360- /* Use concurrent usage as base, but scale based on frequency */
361- int base_dist = (concurrent > 0 ) ? concurrent : 1 ;
361+ dist [* num_buckets ] = concurrent ;
362362
363- /* Scale distribution based on frequency */
364- if (count > total_allocations / 10 ) { /* >10% of allocations */
365- dist [* num_buckets ] = base_dist * 2 ; /* Double for high frequency */
366- } else if (count > total_allocations / 20 ) { /* >5% of allocations */
367- dist [* num_buckets ] = base_dist + 2 ; /* Add 2 for medium frequency */
368- } else if (count > total_allocations / 50 ) { /* >2% of allocations */
369- dist [* num_buckets ] = base_dist + 1 ; /* Add 1 for low frequency */
370- } else {
371- dist [* num_buckets ] = base_dist ; /* Use concurrent usage as is */
372- }
373-
374- /* Cap distribution at reasonable maximum */
375- if (dist [* num_buckets ] > 16 ) {
376- dist [* num_buckets ] = 16 ;
377- }
363+ /* Ensure we have enough buckets for maximum concurrent usage */
364+ /* Don't cap arbitrarily - let the buffer size calculation handle memory constraints */
378365
379366 (* num_buckets )++ ;
380367 }
@@ -518,12 +505,14 @@ void calculate_memory_efficiency(AllocSize* alloc_sizes, int num_sizes,
518505
519506 /* Calculate total memory needed for buckets */
520507 int total_bucket_memory = 0 ;
508+ int total_num_buckets = 0 ;
521509 for (i = 0 ; i < num_buckets ; i ++ ) {
522510 total_bucket_memory += buckets [i ] * dist [i ];
511+ total_num_buckets += dist [i ];
523512 }
524513
525514 /* Calculate total overhead */
526- int total_overhead = calculate_total_overhead (num_buckets );
515+ int total_overhead = calculate_total_overhead (total_num_buckets );
527516 int total_memory_needed = total_bucket_memory + total_overhead ;
528517
529518 printf ("Total bucket memory: %d bytes\n" , total_bucket_memory );
0 commit comments