lecbee wrote:pour la simple raison que les données 64 bits prennent 2 fois plus de place en mémoire que les données en 32 bits.
Je croyais que c'était l'adressage des données qui prenait plus de place et non pas pas les données.
Si l'on a un pointeur sur une chaine de caractères, cette chaine ne prendra pas plus de place, mais c'est son adresse sur 64bits qui prendra plus de place.
pmarion wrote:
lecbee wrote:pour la simple raison que les données 64 bits prennent 2 fois plus de place en mémoire que les données en 32 bits.
Je croyais que c'était l'adressage des données qui prenait plus de place et non pas pas les données.
Si l'on a un pointeur sur une chaine de caractères, cette chaine ne prendra pas plus de place, mais c'est son adresse sur 64bits qui prendra plus de place.
D'accord avec toi, le bus mémoire passe à 64 bit ce qui donne 2^64 = 1.9e19 adresses et à chaque adresse on trouve 1 octet (pour info en 32 bit : 2^32 = 4.3e9 = 4Go).

J'imagine qu'on doit pouvoir utiliser des variables integer ou float codées sur 64bit au lieu de 32 pour avoir moins de limitations ou plus de précision lors des calculs, ce qui demande donc 2x plus de place pour ces variables particulières, mais de là à dire qu'il faut 2x plus de RAM c'est un grossier raccourci 🙂 D'ailleurs je doute que la plupart des applications compilées en 64bit se servent effectivement des avantages propres à cette architecture.
  • [supprimé]

  • Modifié
@pmarion
Exact, la chaine de caractère sera la même, car un char sera toujours sur 8 bits. Par contre, sur un OS 32 bits un int est en 32 bits, sur un OS 64 bits il passe sur 64 bits.
  • [supprimé]

  • Modifié
Salokyn wrote:J'imagine qu'on doit pouvoir utiliser des variables integer ou float codées sur 64bit au lieu de 32 pour avoir moins de limitations ou plus de précision lors des calculs, ce qui demande donc 2x plus de place pour ces variables particulières, mais de là à dire qu'il faut 2x plus de RAM c'est un grossier raccourci 🙂 D'ailleurs je doute que la plupart des applications compilées en 64bit se servent effectivement des avantages propres à cette architecture.
Comme j'ai répondu à pmarion, une variable entière (un int en C par exemple) est codée "normalement" (en 32 bits) sur 32 bits. On peut utiliser une variable sur 64 bits en utilisant "long long int" (ou un truc dans le genre). Mais sur un OS 64 bits, un int basique est directement à 64 bits.
Donc ce n'est absolument pas un grossier raccourci. Ceci dit toutes les variables ne sont pas 2 fois plus grosses (la preuve avec les caractères qui restent à 8 bits).
Pour l'optimisation, c'est plus (+) la responsabilité du compilateur. En réalité une application basique (pas scientifique) n'a rien à faire d'avoir des entiers 64 bits. Déjà un 32 bits est largement suffisant ! (je ne pense pas que beaucoup de développeurs est besoin dans leurs applications d'avoir des nombres supérieur à 4 milliard...). Mais là est la grosse erreur aussi, l'avantage de l'AMD64 ce n'est finalement pas réellement le 64 bits, c'est tout le reste : plus (+) de registres, mise à jour de la base commune (utilisation de SSE), etc.
J'ai trouvé sur un bouquin de C/C++ de Christian Casteyde :
la plupart des compilateurs brisent la règle selon laquelle le
type int est le type des entiers natifs du processeur, et fixent sa taille à 32 bits quelle que soit
l'architecture utilisée. Ainsi, le type short est toujours codé sur 16 bits, le type int sur 32 bits et le
type long sur 32 ou 64 bits selon que l'architecture de la machine est 32 ou 64 bits. Autrement
dit, le type qui représente les entiers nativement n'est plus le type int, mais le type long. Cela ne
change pas les programmes 32 bits, puisque ces deux types sont identiques dans ce cas. Les
programmes destinés aux machines 64 bits pourront quant à eux être optimisés en utilisant le
type long à chaque fois que l'on voudra utiliser le type de données natif de la machine cible. Les
programmes 16 bits en revanchent ne sont en revanche plus compatibles avec ces règles, mais
la plupart des compilateurs actuels ne permettent plus de compiler des programmes 16 bits de
toutes manières.
Donc un int sans long ni short resterait codé sur 32bit quelque soit l'architecture ... enfin ça doit bien varier d'un compilateur à un autre 🙂
  • [supprimé]

Oui c'est une histoire d'implémentation dans ce cas.
Dans les tests que j'avais fait il y a quelques mois avec gcc, sur OS 64 bits, un int est codé en 64 bits.
Un simple essai :
#include <stdlib.h>
#include <stdio.h>

int main (int argc, char* argv[])

    {
    printf("sizeof(short)  = %d\n", sizeof(short));
    printf("sizeof(int)    = %d\n", sizeof(int));
    printf("sizeof(long)   = %d\n", sizeof(long));
    printf("sizeof(size_t) = %d\n", sizeof(size_t));
    return 0;
    }
Le résultat :
$ gcc -o sizeof sizeof.c
$ file sizeof
sizeof: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped
$ ./sizeof 
sizeof(short)  = 2
sizeof(int)    = 4
sizeof(long)   = 8
sizeof(size_t) = 8
Donc int = 32 bits.

++
J'ai fait le test (j'ai Fedora x86_64) :
#include <iostream>

int main(void)
{
    int unsigned a = 5000000000;
    std::cout << a << std::endl;
    return 0;
}
J'obtiens :
$ g++ -m64 test.cc -o test && ./test
test.cc: In function 'int main()':
test.cc:5: attention : grand entier implicitement tronqué pour un type non signé
705032704
Là même chose avec long affiche bien 5000000000.

Par contre si j'utilise toujours long mais que je compile cette fois avec le paramètre -m32, je me fait jeter par le compilateur :
$ g++ -m32 test.cc -o test && ./test
Dans le fichier inclus à partir de /usr/include/features.h:359,
          à partir de /usr/lib/gcc/x86_64-redhat-linux/4.3.2/../../../../include/c++/4.3.2/x86_64-redhat-linux/32/bits/os_defines.h:44,
          à partir de /usr/lib/gcc/x86_64-redhat-linux/4.3.2/../../../../include/c++/4.3.2/x86_64-redhat-linux/32/bits/c++config.h:40,
          à partir de /usr/lib/gcc/x86_64-redhat-linux/4.3.2/../../../../include/c++/4.3.2/iostream:44,
          à partir de test.cc:1:
/usr/include/gnu/stubs.h:7:27: erreur: gnu/stubs-32.h : Aucun fichier ou dossier de ce type
test.cc:5: erreur: integer constant is too large for 'long' type
test.cc: In function 'int main()':
test.cc:5: attention : grand entier implicitement tronqué pour un type non signé
Ce qui vérifie bien ce qui est écrit dans mon bouquin.

PS: Ah Remi m'a doublé avec une technique bien plus élégante 🙂
  • [supprimé]

Tiens j'avais fais exactement le même test que remi, et j'étais persuadé que l'int prenait 8 octets. Ma mémoire flanche ?
Enfin si c'est seulement 4 octets à la limite c'est mieux, ça économise de la mémoire.
D'accord, merci de vos réponses. Je téléchargerai donc l'iso comme prévu dès que possible.
2 mois plus tard
Un grand méchant up pour demander un bilan, du coup.
Il y a beaucoup d'applis qui sont dans les dépôts en 32 bits et pas en 64? À part Wine, mais je suppose qu'à l'install de wine il remonte tout seul les ia32lib, comme sous Ubuntu.
Sinon, qu'est-ce qui change fondamentalement, si je suis prêt à faire des concessions sur le flash? Il y a d'autres choses qui ne passent pas en 64?
Dans l'attente de votre réponse, veuillez agréer, et tout et tout
Bonsoir,

wine est l'une des rares applications non disponibles en 64 bits dans les dépôts officiels : son code contient des instructions assembleur 32 bits. Mais un portage 64 bits est en cours de développement.
Il y a aussi la bibliothèque de compatibilité pour les applications compilées avec gcc 2.9x (compat-libstd-c++-296) ; à l'époque où ce compilateur était utilisé, les architectures 64 bits ne couraient pas les rues ^^.

Il y a quelques applications sur RPM Fusion non disponibles en 64 bits (dont unace), mais cela concerne des applications propriétaires dont l'éditeur n'a pas fourni de binaire 64 bits.

Quant à la question « 64 bits vs 32 bits », c'est une question qui revient souvent sur le forum, et dont les réponses sont parfois (si peu) truffées de troll. Les archives tendent cependant à montrer un gain de performance d'une Fedora 64 bits sur archi. 64 bits, avec la RAM qu'il faut, par rapport à une Fedora 32 bits.

Enfin, depuis qu'Adobe propose en version bêta un plugin 64 bits natif, il n'y a plus de grosse concession à faire... Même Sun propose un plugin Java 64 bits depuis peu, quoiqu'OpenJDK le proposait depuis le début.
Qu'y-a-t-il à gagner de passer en Fedora 64 bits?
Une voiture, des vacances, un ordinateur

ok je ->[ ]
  • [supprimé]

De toute façon avec Fedora 11 vous n'aurez plus choix entre le 64 et le 32. Si le CPU est compatible 64 bits alors Fedora le sera. Et je trouve que c'est une bonne chose, même si c'est un peu "forcé".
tu pourras toujours revenir sur un kernel 32bit, mais il n'y aura pas d'interet dans les cas courant.
De toute façon avec Fedora 11 vous n'aurez plus choix entre le 64 et le 32. Si le CPU est compatible 64 bits alors Fedora le sera. Et je trouve que c'est une bonne chose, même si c'est un peu "forcé".
Sous Linux, tout devrait être proposé, mais rien ne devrait être imposé ! ! !
pmarion wrote:
De toute façon avec Fedora 11 vous n'aurez plus choix entre le 64 et le 32. Si le CPU est compatible 64 bits alors Fedora le sera. Et je trouve que c'est une bonne chose, même si c'est un peu "forcé".
Sous Linux, tout devrait être proposé, mais rien ne devrait être imposé ! ! !
Imagines que l'on te demande de choisir les modules d'un kernel lors de l'installation ou la mise à jours du kernel ?!

Donc je pense que le choix réside plus dans le fait de pouvoir personnliser par la suite, mais de partir d'un choix imposé mais cohérant.
Heldwin wrote:Si on estime qu'on va avoir plus de problèmes de compatibilités ou autres en 64b (drivers, programmes, etc.), et qu'on veut installer la version 32b sur un proc 64b, on devra faire comment ?
Seul le noyau sera 64bits (pour bénéficier d'une meilleure gestion du matériel), les applications seront 32 bits si on le souhaite.
Heldwin wrote:De plus, il me semblait que ça ne servait à rien d'installer un 64b si on avait moins de 3G de mémoire.
Un PC avec proc 64b n'a pas toujours + de 3G de mémoire.
Faux.
Déjà un noyau 32 bits sait gérer plus de 4Gio de mémoire
Mais c'est surtout le jeux d'instructions qui est différent.
De plus la config standard qui tourne actuellement autour de 2Gio, sera donc (loi de moore) d'ici quelques mois de 4Gio.
Heldwin wrote:En tout cas, j'ai plutôt tendance à éviter les 64b, car de toute façon aucun de mes PC a plus de 2G de mémoire ^^
Et c'est mon droit !
Faut vivre avec son temps, mais il y aura toujours des gens qui seront des freins au progrès. On se demande bien pourquoi on n'est pas resté au 16 bits.

+
Ou ce ....Bippppppp... de lecteur disquette.................