preallocate less memory than worst case memory
This commit is contained in:
parent
1c15c3b5b4
commit
61bf486e23
@ -82,7 +82,8 @@ inline b3SparseSymMat33::b3SparseSymMat33(u32 m)
|
||||
row_ptrs = (u32*)b3Alloc((M + 1) * sizeof(u32));
|
||||
memset(row_ptrs, 0, (M + 1) * sizeof(u32));
|
||||
value_count = 0;
|
||||
value_capacity = M * (M + 1) / 2;
|
||||
//value_capacity = M * (M + 1) / 2;
|
||||
value_capacity = 256;
|
||||
values = (b3Mat33*)b3Alloc(value_capacity * sizeof(b3Mat33));
|
||||
value_columns = (u32*)b3Alloc(value_capacity * sizeof(u32));
|
||||
}
|
||||
@ -93,7 +94,7 @@ inline b3SparseSymMat33::b3SparseSymMat33(const b3SparseSymMat33& m)
|
||||
row_ptrs = (u32*)b3Alloc((M + 1) * sizeof(u32));
|
||||
memset(row_ptrs, 0, (M + 1) * sizeof(u32));
|
||||
value_count = m.value_count;
|
||||
value_capacity = M * (M + 1) / 2;
|
||||
value_capacity = m.value_capacity;
|
||||
values = (b3Mat33*)b3Alloc(value_capacity * sizeof(b3Mat33));
|
||||
value_columns = (u32*)b3Alloc(value_capacity * sizeof(u32));
|
||||
|
||||
@ -114,12 +115,6 @@ inline b3SparseSymMat33& b3SparseSymMat33::operator=(const b3SparseSymMat33& _m)
|
||||
return *this;
|
||||
}
|
||||
|
||||
if (M == _m.M)
|
||||
{
|
||||
Copy(_m);
|
||||
return *this;
|
||||
}
|
||||
|
||||
b3Free(row_ptrs);
|
||||
b3Free(values);
|
||||
b3Free(value_columns);
|
||||
@ -224,8 +219,25 @@ inline b3Mat33& b3SparseSymMat33::operator()(u32 i, u32 j)
|
||||
}
|
||||
}
|
||||
|
||||
// Shift the values
|
||||
if (value_count == value_capacity)
|
||||
{
|
||||
b3Mat33* old_values = values;
|
||||
u32* old_columns = value_columns;
|
||||
|
||||
value_capacity *= 2;
|
||||
values = (b3Mat33*)b3Alloc(value_capacity * sizeof(b3Mat33));
|
||||
value_columns = (u32*)b3Alloc(value_capacity * sizeof(u32));
|
||||
|
||||
memcpy(values, old_values, value_count * sizeof(b3Mat33));
|
||||
memcpy(value_columns, old_columns, value_count * sizeof(u32));
|
||||
|
||||
b3Free(old_values);
|
||||
b3Free(old_columns);
|
||||
}
|
||||
|
||||
B3_ASSERT(value_count < value_capacity);
|
||||
|
||||
// Shift the values
|
||||
for (u32 row_value = value_count; row_value > row_value_begin + row_value_position; --row_value)
|
||||
{
|
||||
values[row_value] = values[row_value - 1];
|
||||
|
Loading…
x
Reference in New Issue
Block a user