Du 64bits?
Bonjour à tous,
Avec l'arrivée imminente de Snow Leopard je me pose une question : Le 64bits est-il utile pour tout le monde?
Apple insiste pour que les développeurs mettent à jour leurs applications vers du 64bits.. donc j'ai plusieurs questions :
- Il est possible que son application soit 32/64bits à la fois? Il me semble que oui.
- Quel est l'intérêt de porter son application pour du 64bits? Est-ce que ça change vraiment quelque chose pour une "petite" application? Il me semble que c'est surtout utile pour du gros traitement genre encodage vidéo, photos, etc...
- Le portage vers 64bits est-il "facile"? Une simple selection dans les configurations de build ferait l'affaire?
Louka.
Avec l'arrivée imminente de Snow Leopard je me pose une question : Le 64bits est-il utile pour tout le monde?
Apple insiste pour que les développeurs mettent à jour leurs applications vers du 64bits.. donc j'ai plusieurs questions :
- Il est possible que son application soit 32/64bits à la fois? Il me semble que oui.
- Quel est l'intérêt de porter son application pour du 64bits? Est-ce que ça change vraiment quelque chose pour une "petite" application? Il me semble que c'est surtout utile pour du gros traitement genre encodage vidéo, photos, etc...
- Le portage vers 64bits est-il "facile"? Une simple selection dans les configurations de build ferait l'affaire?
Louka.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Pour les NSUInteger et NSInteger en 32 bits ils sont compilés en unsigned et int, ce qui fait qu'il faut utiliser %u, %d, %x, %o ou %i, alors qu'en 64 bits ils sont équivalents à des unsigned long et long, il faut donc utiliser %lu, %ld, %lx, %lo ou %li. Pour éviter ce problème la technique est simple, il suffit de compiler en définissant la macro: NS_BUILD_32_LIKE_64.
Le type sera alors toujours unsigned long ou long, sa taille changera selon l'architecture mais les formats seront capable de faire la différence avec %ld, %lu, etc.
ça ne change pas grand chose pour les petites applications d'utiliser la version 64 bits, mais il est préférable de le faire car, pour commencer Snow Leopard sera optimiser pour 64 bits, et qu'en suite le runtime ObjC change radicalement sous 64 bits et que la destiné du 32 bits est de disparaà®tre.
Le changement selon moi le plus important en 64 bits et qui est la meilleure raison de changer est le fait qu'en 64 bits, les variables d'instance des classes ObjC ne sont pas "fragiles".
Dans l'ancien runtime, lorsqu'une super-classe de ta classe était modifiée, c'est-à -dire un ajout d'ivar par exemple, ou le changement de type d'une ivar, il fallait recompiler ta propre classe pour que le changement soit pris en compte et que ta classe soit utilisable à nouveau.
Avec le nouveau runtime, les ivars ne sont plus "fragiles" c'est-à -dire que si la super-classe et modifiée (ajoute/modificaition/suppression d'ivar) tu n'as plus besoin de recompiler ta classe pour qu'elle fonctionne, le changement sera immédiatement pris en compte de façon transparante.
C'est un point très important car Apple, selon moi, l'a ajouté pour pouvoir faire beaucoup de conneries dans ses APIs sans déranger les développeurs, et à mon avis ils n'hésiteront plus à le faire avec ce runtime. Notamment, ils pourraient vouloir modifier NSView ou CALayer pour ajouter des ivars, et le faire avec l'ancien runtime ferait exploser toutes les applications qui font un peu de personalisation d'interface...
Personnellement, je ferais la migration vers 64 bits rien que pour cette raison, tu auras de meilleure perspective d'avenir, même si ton application n'utilise jamais plus de 1 Mo de RAM...
Pour le portage, si tu ne fais pas d'ASM, ou de traitement bas niveau avec des paddings dans tous les sens, ce qui m'étonnerait, tu ne devrais pas avoir trop de difficultés à migrer. Cependant des tests approfondies sont nécessaires, mais ça va de soi quand on développe une application.
Lorsque tu es en Debug Xcode est configuré pour compilé seulement pour la cible locale
Sinon pour les vérifications, tant que tu reste sur des couches haut niveau tu n'as normalement aucun problème. La où il faut vérifier c'est quand tu commence a faire des appel bas niveau (asm) pour tes traitement. A ce moment la va falloir écrire du code différent pour chaque archi.
En théorie, tant que tu utilises des types portables (par exemple NSInteger au lieu de int), une simple compilation en 64 bits au dernier moment doit faire l'affaire.
... En théorie
En pratique il faut tester son application dans tous les modes, évidemment.
Genre typiquement les types genre NSUInteger n'étant pas typedefinié de la même manière en 32 ou 64 bits, dans la plupart des cas ça te semblera transparent, mais dans des cas comme les formats printf-like (genre dans stringWithFormat:...) faut faire gaffe à faire la distinction du coup, au risque sinon de voir des chaà®nes formattées n'importe comment voire, pire, un crash de l'appli car ton stringWithString ne lira pas la bonne taille (le bon nombre d'octets) dans son nombre variable d'arguments si les %xx sont erronés, risquant de lire hors mémoire.
Bref, faut faire gaffe aux subtilités, voir le post de psychoh13 ainsi que les guides sur le site developpeur d'Apple à ce sujet.
J'ai cru remarquer qu'une appli 64bits consomme plus de RAM que la version 32bits.
En effet, mon app une fois lancée en 32bits consomme d'emblée 27Mo de RAM, et 50Mo pour la 64bits.
J'ai donc testé plusieurs autres applications qui ont le support 64bits, et c'est à peu près la meme chose. La consommation est plus forte.
Une explication?
Ben cela semble logique si la moindre donnée stockée en mémoire consomme 64 bits au lieu de 32.
En fait c'est pas tant la moindre donnée, mais les types primitif qui vont poser problème, et pour le coup tous les pointeurs qui faisaient une taille de 32bits passent à 64 pour pouvoir gérer plus de mémoire, donc on consomme plus
Oui ça semble parfaitement logique... Le 64Bits c'est bien parce que ça va plus vite pour certains traitements.. c'est bien parce qu'on peut mettre aussi plus de RAM Mais du coup ça en consomme plus.
Je trouve ça limite con mais bon ::)
C'est bien le seul inconvénient que j'ai pu trouvé et qui m'avait pas sauté au cerveau dès que j'ai entendu 64bits malheureusement.
Et puis certes on peut en mettre plus, mais le "on peut" me gêne.. parce que tout le monde ne le fait pas
Yes, fort heureusement