Avatar ·

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