From 1704c29b90535286afde9a42982c6cacc2e94ae2 Mon Sep 17 00:00:00 2001 From: Benny Baumann Date: Tue, 6 Oct 2020 17:10:23 +0200 Subject: Use memmove for Vector_take Doing a quick check with callgrind this gives an average reduction from 1804 cycles/call down to 491 cycles/call on my test system. The average was taken over about 40k calls. --- Vector.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'Vector.c') diff --git a/Vector.c b/Vector.c index af219dda..a606894d 100644 --- a/Vector.c +++ b/Vector.c @@ -204,8 +204,9 @@ Object* Vector_take(Vector* this, int idx) { Object* removed = this->array[idx]; //assert (removed != NULL); this->items--; - for (int i = idx; i < this->items; i++) - this->array[i] = this->array[i+1]; + if(idx < this->items) { + memmove(&this->array[idx], &this->array[idx + 1], (this->items - idx) * sizeof(this->array[0])); + } //this->array[this->items] = NULL; assert(Vector_isConsistent(this)); return removed; -- cgit v1.2.3