From 462041654d130819cc689d9ae515e18506d9ac1d Mon Sep 17 00:00:00 2001 From: seb Date: Mon, 23 Jun 2025 04:16:18 +0200 Subject: [PATCH] Optimize search result finalization by reallocating in place Replace the malloc/copy/free sequence with a single realloc that shrinks temp_results to its exact size and returns it directly. This * eliminates an extra allocation and memory copy * simplifies cleanup logic * retains correct failure handling (temp_results unchanged on realloc failure) Also drop the superfluous trailing space at EOF and add package-lock.json to version control to lock Node.js dependencies. --- similarity_search.c | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/similarity_search.c b/similarity_search.c index 1892d37..6dc750a 100644 --- a/similarity_search.c +++ b/similarity_search.c @@ -307,24 +307,17 @@ SearchResult* search_index(SearchIndex* index, const char* query, float cutoff, // Sort results by similarity qsort(temp_results, *num_results, sizeof(SearchResult), compare_results); - // Allocate final result array with exact size - SearchResult* results = (SearchResult*)malloc(*num_results * sizeof(SearchResult)); + // Shrink temp_results to exact size and return it directly + SearchResult* results = (SearchResult*)realloc( + temp_results, *num_results * sizeof(SearchResult)); if (!results) { - // Free all strings in temp_results + // realloc failure – temp_results unchanged, clean up for (int i = 0; i < *num_results; i++) { free(temp_results[i].string); } free(temp_results); return NULL; } - - // Copy results to final array - for (int i = 0; i < *num_results; i++) { - results[i].string = temp_results[i].string; - results[i].similarity = temp_results[i].similarity; - } - free(temp_results); - return results; } @@ -337,4 +330,4 @@ void free_search_results(SearchResult* results, int num_results) { free(results[i].string); } free(results); -} \ No newline at end of file +}