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));
|
row_ptrs = (u32*)b3Alloc((M + 1) * sizeof(u32));
|
||||||
memset(row_ptrs, 0, (M + 1) * sizeof(u32));
|
memset(row_ptrs, 0, (M + 1) * sizeof(u32));
|
||||||
value_count = 0;
|
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));
|
values = (b3Mat33*)b3Alloc(value_capacity * sizeof(b3Mat33));
|
||||||
value_columns = (u32*)b3Alloc(value_capacity * sizeof(u32));
|
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));
|
row_ptrs = (u32*)b3Alloc((M + 1) * sizeof(u32));
|
||||||
memset(row_ptrs, 0, (M + 1) * sizeof(u32));
|
memset(row_ptrs, 0, (M + 1) * sizeof(u32));
|
||||||
value_count = m.value_count;
|
value_count = m.value_count;
|
||||||
value_capacity = M * (M + 1) / 2;
|
value_capacity = m.value_capacity;
|
||||||
values = (b3Mat33*)b3Alloc(value_capacity * sizeof(b3Mat33));
|
values = (b3Mat33*)b3Alloc(value_capacity * sizeof(b3Mat33));
|
||||||
value_columns = (u32*)b3Alloc(value_capacity * sizeof(u32));
|
value_columns = (u32*)b3Alloc(value_capacity * sizeof(u32));
|
||||||
|
|
||||||
@ -113,13 +114,7 @@ inline b3SparseSymMat33& b3SparseSymMat33::operator=(const b3SparseSymMat33& _m)
|
|||||||
{
|
{
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (M == _m.M)
|
|
||||||
{
|
|
||||||
Copy(_m);
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
b3Free(row_ptrs);
|
b3Free(row_ptrs);
|
||||||
b3Free(values);
|
b3Free(values);
|
||||||
b3Free(value_columns);
|
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);
|
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)
|
for (u32 row_value = value_count; row_value > row_value_begin + row_value_position; --row_value)
|
||||||
{
|
{
|
||||||
values[row_value] = values[row_value - 1];
|
values[row_value] = values[row_value - 1];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user