salut,

sans rentrer dans les détails des 'optimisations', je peux te donner 
quelques 'règles de base' pour avoir du code portable 32/64 (désolé, j'ai pas 
de tuto sous la main, du dois pouvoir en trouver sur le net, je pense).

1- bien activer les warnings (-Wall par exemple)
2- fais gaffe au padd et au packed (-Wpadd et -Wpacked)
3- vérifie les sizeof des types que tu utilises (c'est juste une protection 
des fois que tu aies loupé un truc dans ton code)
4- évite les casts 'brutaux': l'erreur la plus courante que j'ai eu quand j'ai 
fait des corrections sur des softs qui marchaient pas en 64bits, c'est des 
mecs qui font des:
void* ptr=&foobar;
int     a=(int)ptr;

pour être portable 64bits, il faudrait écrire:
void* ptr=&foobar;
long    a=(long)ptr;

car en 32bits, sizeof(void*) = sizeof(long) = sizeof(int) = 4 (32bits)
en 64bits sizeof(void*) = sizeof(long) =8 (64bits) et sizeof(int)=4 (32bits)

c'est vraiment l'erreur la plus répandue, et un grep "(int)" dans le code 
permet de la trouver généralement assez rapidement.

dans le même ordre d'idée, les casts de 'long' vers 'int' marchent très bien 
en 32b, mais peuvent poser problème en 64b (pareil pour les typedef 
union, ...)

généralement, pour les protocoles de communication et les descriptions de 
fichier, on redéfini les types pour avoir explicitement le nombre de bits 
concernés (et éventuellement l'indienness, l'ordre de poids de octets).
Ca se fait par des #if:
#include <limits.h>
#if UINT_MAX == ULONG_MAX
        //ici, on est en 32bits
        typedef struct{
                //des choses
        }MaJolieStructureQuiPrend96bits;
#else
        //ici, on est en 64bits
        #if ULONG_MAX != 18446744073709551615ULL
        #error erreur car on est visiblement pas réellement en 64bits
        #endif
        typedef struct{
                //des choses
        }MaJolieStructureQuiPrend96bits;

#endif


amuse toi bien!
tiens, autre 'truc', sur un amd64, pour compiler en 32bits, c'est 
facile: "-m32"
"man gcc" est ton ami ;)

Fred "ZeBarbu"

Le samedi 30 septembre 2006 21:28, Romain Thouvenin a écrit :
> Je me permets de dévier un peu du sujet.
>
> Ta réponse me rappelle les "soucis" que j'ai eu il y a quelques jours,
> parce que justement je devais faire un programme portable
> (implémentation d'un protocole). Je voulais donc savoir si tu as sous
> le coude un bon tuto sur ce qu'il faut faire pour avoir un code
> portable 32 / 64 bits.
>
> Romain
>
> Le 30/09/06, Frédéric Marmond<[EMAIL PROTECTED]> a écrit :
> > Salut,
> >
> > j'espère ne pas être trop hors sujet, je suis en amd64 depuis plusieurs
> > années, mais j'ai pas trop utilisé de version '32bits' récemment...
> > quelques remarques cependant:
> > - les binaires 64bits sont un peu plus gros
> > - certains progs 'mal écrits' ne marchent pas sur amd64 (mais on en
> > trouve de moins en moins)
> > - beaucoup de progs proprios n'ont pas été portés sur amd64 (flash par
> > exemple)
> >
> > + en théorie, tu vas plus vite en amd64 car les binaires sont déja
> > compilés spécifiquement pour l'archi, avec toutes ses extensions (alors
> > que les binaires i386 n'utilisent qu'une toute petite partie des
> > possibilités du proc)
> > + pour ma part, je code en tenant compte de la spécificité de l'amd64, et
> > mon code 'optimisé' tourne vraiment nettement plus vite que sur la même
> > machine en dapper 32 (~1.7* plus vite). Mais c'est vraiment dû à des
> > choix dans la programmation, et tous les developeurs ne le font pas
> > (forcément, les mecs qui bossent sur 32bits ne vont pas se casser la tête
> > pour que ca marche encore plus vite en 64b)
> > + ton noyau k8 aura les drivers pour faire de l'économie d'énergie (merci
> > pour la facture edf, le bruit, la chaleur) en réduisant la vitesse du
> > proc (powernow par exemple)
> >
> > il faut aussi savoir que si tu ne passes QUE ton noyau en 'optimisé',
> > tous tes logiciels/librairies resteront en 'non optimisés' (i386).
> >
> > autre truc à savoir: tu peux installer une dapper32 dans une autre
> > partition, et utiliser les softs qui n'existent pas encore en 64bits
> > depuis ton dapper64 par un fakeroot. j'utilise ca quand j'ai besoin
> > d'aller sur un site qui utilise du flash
> >
> > bon courage!
> >
> > Fred
> >
> > Le samedi 30 septembre 2006 13:49, Romain Thouvenin a écrit:
> > > Le 30/09/06, Lionel Porcheron<[EMAIL PROTECTED]> a écrit :
> > > > Romain Thouvenin a écrit :
> > > > > Bonjour,
> > > > >
> > > > > Je dispose actuellement de Ubuntu Dapper, avec un noyau -386.
> > > > > Mais j'ai un processeur AMD Athlon 64, et j'aimerais installer le
> > > > > noyau correspondant.
> > >
> > > [...]
> > >
> > > > > Donc voilà, si vous avez une solution quelqconque pour passer à un
> > > > > noyau k8, je suis preneur.
> > > >
> > > > Malheureusement, il n'est pas possible de changer d'un système 32bits
> > > > à 64bits sans réinstaller entièrement le système. Ce sont des
> > > > architectures différentes (même s'il y a une certaine compatibilité)
> > > > et l'ensemble des packages est impacté.
> > > >
> > > > Lionel
> > >
> > > Ok, merci.
> > >
> > > Ma question devient alors : Quelqu'un aurait-il un retour d'expérience
> > > à me faire part sur le gain qu'il y a à passer d'un système 32bits à
> > > 64bits ? Et passer d'un 386 à un optimisé (ce serait k7 dans mon cas)
> > > ?
> > >
> > > Romain

-- 
ubuntu-fr mailing list
ubuntu-fr@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-fr

Répondre à