mati1297 / tp3_taller1

0 stars 0 forks source link

Demasiados resizes #5

Open eldipa opened 3 years ago

eldipa commented 3 years ago

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 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.