¿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