Al hacer N resizes de un tamaño fijo PREDEFINED_SIZE_BLOCK, haces demasiadas reallocaciones (copias), 1 por cada llamada a resize.
Sabiendo q necesitas size bytes en total, podes saber cuantos bytes extras necesitas y hacer una unica llamada a resize.
Mas aun, si esperas q esta situacion de necesitar extender el vector se de frecuentemente, podes hacer un resize con crecimiento exponencial.
Si necesitas q tu vector tenga size bytes en total, haces:
size_t to_reserve = array.size();
while (to_reserve < size /* lo q quiero tener al final */ ) {
to_reserve *= 2; // podria ser *1.5 tambien y ser mas conservativos
}
array.resize(to_reserve);
De esa manera haces 1 solo resize, y por el hecho de pedir siempre de mas, el costo de multiples resizes (copias) se amortiza.
https://github.com/mati1297/tp3_taller1/blob/02f1d76d47703c8b2a0c49a804182b66072cf47c/common_packet.cpp#L78-L85
Al hacer N resizes de un tamaño fijo
PREDEFINED_SIZE_BLOCK
, haces demasiadas reallocaciones (copias), 1 por cada llamada aresize
.Sabiendo q necesitas
size
bytes en total, podes saber cuantos bytes extras necesitas y hacer una unica llamada aresize
.Mas aun, si esperas q esta situacion de necesitar extender el vector se de frecuentemente, podes hacer un resize con crecimiento exponencial.
Si necesitas q tu vector tenga
size
bytes en total, haces:De esa manera haces 1 solo resize, y por el hecho de pedir siempre de mas, el costo de multiples resizes (copias) se amortiza.