Avatar ·

¿Cómo maneja Rust los enteros de 128 bits `i128` en un sistema de 64 bits? ¿Afecta esto al rendimiento?

¡Hola a todos! Estoy aprendiendo Rust y me topé con el tipo `i128` (entero con signo de 128 bits). Estoy escribiendo un parser para números grandes de JSON y necesito almacenar valores como `2^64` y mayores. Estoy acostumbrado a que en procesadores x86-64 los registros son de 64 bits, y no entiendo cómo el procesador realiza operaciones con números de 128 bits. Escribí un benchmark simple (usando `cargo bench`) que mide la suma de dos `i128` y dos `i64`: ```rust #![feature(test)] extern crate test; #[bench] fn add_i64(b: &mut test::Bencher) { let a: i64 = 1234567890123456789; let b_val: i64 = 987654321098765432; b.iter(|| { let c = a + b_val; test::black_box(c); }); } #[bench] fn add_i128(b: &mut test::Bencher) { let a: i128 = 123456789012345678901234567890123456789; let b_val: i128 = 98765432109876543210987654321098765432; b.iter(|| { let c = a + b_val; test::black_box(c); }); } ``` Los resultados mostraron que `i128` funciona aproximadamente