Improve and simplify the memory layout of MPMCQueue

This commit is contained in:
gingerBill
2021-08-07 14:25:48 +01:00
parent 911c428dac
commit 571170fd30
3 changed files with 76 additions and 51 deletions

View File

@@ -326,12 +326,17 @@ void array_set_capacity(Array<T> *array, isize capacity) {
array_resize(array, capacity);
}
T *new_data = nullptr;
if (capacity > 0) {
new_data = gb_alloc_array(array->allocator, T, capacity);
gb_memmove(new_data, array->data, gb_size_of(T) * array->capacity);
// NOTE(bill): try gb_resize_align first, and then fallback to alloc+memmove+free
isize old_size = array->capacity * gb_size_of(T);
isize new_size = capacity * gb_size_of(T);
T *new_data = cast(T *)gb_resize_align(array->allocator, array->data, old_size, new_size, gb_align_of(T));
if (new_data == nullptr) {
if (capacity > 0) {
new_data = gb_alloc_array(array->allocator, T, capacity);
gb_memmove(new_data, array->data, gb_size_of(T) * array->capacity);
}
gb_free(array->allocator, array->data);
}
gb_free(array->allocator, array->data);
array->data = new_data;
array->capacity = capacity;
}