diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2010-06-08 11:44:30 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2010-06-08 11:44:30 +0000 |
commit | d164d3d9e74aa099ce7ef86ac0724fe504f7c3f9 (patch) | |
tree | f1514d4f5ce92aa15f9fed424d52667db54d40c8 /include | |
parent | e77ff11a346a76a61c1d9669db8c894bc7b7144b (diff) |
Use realloc instead of malloc+memcpy when growing a POD SmallVector. A smart
realloc implementation can try to expand the allocated memory block in-place,
avoiding the copy.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@105605 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r-- | include/llvm/ADT/SmallVector.h | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/include/llvm/ADT/SmallVector.h b/include/llvm/ADT/SmallVector.h index 0f0aedb608..e4fa809abd 100644 --- a/include/llvm/ADT/SmallVector.h +++ b/include/llvm/ADT/SmallVector.h @@ -17,6 +17,7 @@ #include "llvm/Support/type_traits.h" #include <algorithm> #include <cassert> +#include <cstdlib> #include <cstring> #include <memory> @@ -207,7 +208,7 @@ void SmallVectorTemplateBase<T, isPodLike>::grow(size_t MinSize) { size_t NewCapacity = 2*CurCapacity; if (NewCapacity < MinSize) NewCapacity = MinSize; - T *NewElts = static_cast<T*>(operator new(NewCapacity*sizeof(T))); + T *NewElts = static_cast<T*>(malloc(NewCapacity*sizeof(T))); // Copy the elements over. this->uninitialized_copy(this->begin(), this->end(), NewElts); @@ -217,7 +218,7 @@ void SmallVectorTemplateBase<T, isPodLike>::grow(size_t MinSize) { // If this wasn't grown from the inline copy, deallocate the old space. if (!this->isSmall()) - operator delete(this->begin()); + free(this->begin()); this->setEnd(NewElts+CurSize); this->BeginX = NewElts; @@ -282,7 +283,7 @@ public: // If this wasn't grown from the inline copy, deallocate the old space. if (!this->isSmall()) - operator delete(this->begin()); + free(this->begin()); } |