diff --git a/CHANGELOG.md b/CHANGELOG.md index 51c71b0f5b..77c8871d4f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ #### Upcoming Changes +* perf: Pre-allocate collections during program deserialization [#2300](https://github.com/lambdaclass/cairo-vm/pull/2300) + * chore: Remove old compare-benchmarks Makefile command [#2307](https://github.com/lambdaclass/cairo-vm/pull/2307) * chore: Update iai-callgrind from 0.3.1 to 0.14.0 [#2311](https://github.com/lambdaclass/cairo-vm/pull/2311) diff --git a/vm/src/serde/deserialize_program.rs b/vm/src/serde/deserialize_program.rs index 2c483da77d..a45d24fb01 100644 --- a/vm/src/serde/deserialize_program.rs +++ b/vm/src/serde/deserialize_program.rs @@ -341,11 +341,12 @@ impl<'de> de::Visitor<'de> for MaybeRelocatableVisitor { where A: SeqAccess<'de>, { - let mut data: Vec = vec![]; + let mut data: Vec = + Vec::with_capacity(seq.size_hint().unwrap_or_default()); while let Some(value) = seq.next_element::()? { // Add padding if necessary - let value = deserialize_utils::maybe_add_padding(value.to_string()); + let value = deserialize_utils::maybe_add_padding(value); data.push(MaybeRelocatable::Int( Felt252::from_hex(&value).map_err(de::Error::custom)?, )); @@ -367,7 +368,8 @@ impl<'de> de::Visitor<'de> for ReferenceIdsVisitor { where A: MapAccess<'de>, { - let mut data: HashMap = HashMap::new(); + let mut data: HashMap = + HashMap::with_capacity(map.size_hint().unwrap_or_default()); while let Some((key, value)) = map.next_entry::()? { data.insert(key, value);