From 46c887b77eb2f8a3c356e75b340c1c2286a9cfbb Mon Sep 17 00:00:00 2001 From: Stefan Weil Date: Wed, 3 May 2017 09:49:23 +0200 Subject: [PATCH] genericvector: Fix minimum size Commit 907de5995f698e2a01da25fa09f8cadaf31a095f tried to improve GenericVector, but missed a case where vectors with less than kDefaultVectorSize were allocated. This resulted in additional alloc / free operations. Commit a28b2a033df10010bba9c1f49d6410ad69b3cdde (before memory optimization) oem 0: total heap usage: 739,238 allocs, 739,237 frees, 161,699,214 bytes allocated oem 1: total heap usage: 690,182 allocs, 690,175 frees, 144,470,400 bytes allocated oem 2: total heap usage: 728,213 allocs, 728,206 frees, 182,885,824 bytes allocated Commit fd3f8f9b2d8c9ebf72b20a9d254a8e5c6900461e without genericvector change oem 0: total heap usage: 738,980 allocs, 738,979 frees, 161,697,150 bytes allocated oem 1: total heap usage: 690,182 allocs, 690,175 frees, 144,470,400 bytes allocated oem 2: total heap usage: 728,213 allocs, 728,206 frees, 182,885,824 bytes allocated => Improvements for oem 0, no change for oem 1 and oem 2. Commit fd3f8f9b2d8c9ebf72b20a9d254a8e5c6900461e oem 0: total heap usage: 772,648 allocs, 772,647 frees, 160,083,901 bytes allocated oem 1: total heap usage: 748,591 allocs, 748,584 frees, 143,581,672 bytes allocated oem 2: total heap usage: 764,796 allocs, 764,789 frees, 181,212,197 bytes allocated => Less bytes allocated, but more allocs / frees = bad for performance. Commit fd3f8f9b2d8c9ebf72b20a9d254a8e5c6900461e with this patch oem 0: total heap usage: 677,537 allocs, 677,536 frees, 160,444,634 bytes allocated oem 1: total heap usage: 653,812 allocs, 653,805 frees, 143,423,008 bytes allocated oem 2: total heap usage: 670,029 allocs, 670,022 frees, 181,517,760 bytes allocated => Improvements for all three cases. Signed-off-by: Stefan Weil --- ccutil/genericvector.h | 1 + 1 file changed, 1 insertion(+) diff --git a/ccutil/genericvector.h b/ccutil/genericvector.h index dfc70f1afa..4dee34d178 100644 --- a/ccutil/genericvector.h +++ b/ccutil/genericvector.h @@ -658,6 +658,7 @@ template void GenericVector::reserve(int size) { if (size_reserved_ >= size || size <= 0) return; + if (size < kDefaultVectorSize) size = kDefaultVectorSize; T* new_array = new T[size]; for (int i = 0; i < size_used_; ++i) new_array[i] = data_[i];