2017-06-20 1 views
1

Un booléen déterminant si c'est 64 bits est parfait mais un nombre entier représentant la quantité de bits serait également bon.Y at-il un moyen de vérifier si le système d'exploitation de l'application s'exécute est 32 ou 64 bits?

Je veux capturer quelques informations sur l'architecture du PC à des fins statistiques.

+2

Fondamentalement, une copie de [comment trouver si la machine est 32 bits ou 64 bits] (https://stackoverflow.com/questions/2401756/how-to-find-if-the-machine-is-32bit-or- 64bit). – Shepmaster

+0

@Shepmaster cette question est sur [tag: c] alors que celui-ci est sur [tag: rouille]. – tversteeg

+2

Alors? La question n'a rien à voir avec Rust. Par définition, il s'agit de savoir comment interroger le système d'exploitation pour obtenir des informations, ce qui n'est ni le cas de Rust ni la bibliothèque standard de Rust. – Shepmaster

Répondre

2

Dans le meilleur des cas, votre programme est déjà compilé pour la bonne architecture/cible. Cela signifie que vous savez déjà au moment de la compilation si le programme est compilé ou non pour une cible 32 bits ou 64 bits. Vous pouvez vérifier que en utilisant le cfg() attribute ou cfg!() macro:

fn is_compiled_for_64_bit() -> bool { 
    cfg!(target_pointer_width = "64") 
} 

#[cfg(target_pointer_width = "32")] 
fn foo() { 
    println!("foo compiled for 32 bit"); 
} 

#[cfg(target_pointer_width = "64")] 
fn foo() { 
    println!("foo compiled for 64 bit"); 
} 

Mais au cas où vous voulez expédier uniquement les binaires 32 bits à vos utilisateurs, votre programme est ensuite exécuté soit nativement par 32 bits de l'utilisateur du matériel ou en mode de compatibilité par le matériel 64 bits de l'utilisateur. Pour savoir si votre programme s'exécute réellement sur une architecture 32 bits ou juste en mode de compatibilité 32 bits est plus difficile et dépend de votre système d'exploitation. Je ne suis pas au courant d'un moyen multi-plateforme facile de le faire. Je vous conseille de compiler séparément pour chaque architecture que vous ciblez de toute façon.

+1

La question est de savoir si le système d'exploitation est 64 ou 32 bits. Pas l'application. – mason

+2

@mason cette partie est adressée par le paragraphe avec "Pour trouver notre si votre programme fonctionne réellement sur une architecture 32 bits ou juste dans un mode de compatibilité 32 bits ..." – Shepmaster

-1

Vous pouvez utiliser ceci:

#[cfg(target_os="your operating system here")] 
// code here 

Cette vérifie littéralement juste si le système d'exploitation du programme a été compilé sur est celui recommandé. Alors je suppose que vous pouvez faire pour vérifier les bits du système d'exploitation:

#[cfg(all(unix, target_pointer_width = "32"))] 
// code here 

Où unix est le système d'exploitation (juste un espace réservé, devrait prendre en charge Windows, etc.), et 32 ​​est le nombre de bits du système d'exploitation.

+0

[réponse de Lukas Kalbertodt] (https: // stackoverflow. com/a/44655636/155423) dit déjà ce que cette réponse fait; Peut-être pourriez-vous être clair sur ce que cette nouvelle réponse apporte? Cela a également les mêmes limites - il ne rapportera pas 64 bits lorsqu'il est exécuté dans un environnement de compatibilité. – Shepmaster

+0

@Shepmaster désolé !!Je ne l'ai pas lu assez bien !! – lolman

+0

@Shepmaster, où trouver la liste des valeurs valides pour "target_os" et des paramètres similaires? Merci. –