Comment Rust gère les entiers 128 bits `i128` sur un système 64 bits ? Cela affecte-t-il les performances ?
Bonjour à tous ! J'apprends Rust et je suis tombé sur le type `i128` (entier signé 128 bits). J'écris un parser pour de grands nombres à partir de JSON, et j'ai besoin de stocker des valeurs comme `2^64` et plus. J'ai l'habitude que sur les processeurs x86-64, les registres sont 64 bits, et je ne comprends pas comment le processeur effectue des opérations avec des nombres 128 bits.
J'ai écrit un simple benchmark (en utilisant `cargo bench`) qui mesure l'addition de deux `i128` et de deux `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);
});
}
```
Les résultats ont montré que `i128` fonctionne environ