Du 64bits?

22:27 modifié dans API AppKit #1
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.

Réponses

  • psychoh13psychoh13 Mothership Developer Membre
    22:27 modifié #2
    Oui il est possible de faire une application universelle 32/64, mais il faut faire gaffe à  certains vices cachés. Par exemple, il faut faire attention à  l'utilisation des variables qui ont des types changeant selon l'architecture, NSUInteger, NSInteger ou CGFloat. Notamment pour les formats (printf, NSLog, etc.). Pour CGFloat le problème est minime puisque dans une fonction avec nombre d'arguments variables, les float sont transformés en double, et donc %f est valable dans les deux cas.

    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. ;)
  • 22:27 modifié #3
    Excellentes explications  Merci
  • psychoh13psychoh13 Mothership Developer Membre
    22:27 modifié #4
    Ha j'oubliais de préciser que pour pouvoir compiler une application en 64 bits, il faut que les frameworks et autre bibliothèques auxquels est liées l'application soit aussi en 64 bits.
  • GreensourceGreensource Membre
    22:27 modifié #5
    Mais concrètement on a quelques choses à  faire dans Xcode? Quand je fait new Project, aujourd'hui c'est automatiquement du 64Bits qui sera généré non?
  • psychoh13psychoh13 Mothership Developer Membre
    22:27 modifié #6
    Non, dans Xcode il faut lire les infos de ton projet, et tu choisis l'architecture appropriée, par défaut c'est 32 bits, tu peux aussi prendre 32/64 bits universel.
  • schlumschlum Membre
    22:27 modifié #7
    Attention ; 32/64 universel = quadruple le temps de compilation et la taille des exécutables par rapport à  une compilation pour une architecture unique.
  • GreensourceGreensource Membre
    22:27 modifié #8
    Et du coup, est-ce qu'on peut au dernier moment, quand le projet est fini, compiler en 64bits? Ou alors faut toujours mettre les deux (si on veut les deux) et vérifier à  chaque fois que c'est universel?
  • yoannyoann Membre
    22:27 modifié #9
    dans 1249043830:

    Et du coup, est-ce qu'on peut au dernier moment, quand le projet est fini, compiler en 64bits? Ou alors faut toujours mettre les deux (si on veut les deux) et vérifier à  chaque fois que c'est universel?


    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.
  • zoczoc Membre
    22:27 modifié #10
    dans 1249043830:

    Et du coup, est-ce qu'on peut au dernier moment, quand le projet est fini, compiler en 64bits? Ou alors faut toujours mettre les deux (si on veut les deux) et vérifier à  chaque fois que c'est universel?


    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.
  • AliGatorAliGator Membre, Modérateur
    22:27 modifié #11
    Oui car il y a qd même des subtilitées, comme soulignait psychoh13.
    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.
  • psychoh13psychoh13 Mothership Developer Membre
    22:27 modifié #12
    Réduisez les chances d'erreur en utilisant NS_BUILD_32_LIKE_64 dans les macros preprocesseur de votre projet. Avec ça la plupart des rpoblèmes de transitions disparaà®tront.
  • schlumschlum Membre
    22:27 modifié #13
    Ce qui joue le plus souvent des tours ce sont les problèmes endianness entre PPC et i386...
  • 22:27 modifié #14
    Bonjour,

    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?
  • RocouRocou Membre
    22:27 modifié #15
    dans 1255781933:

    Bonjour,

    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.
  • yoannyoann Membre
    22:27 modifié #16
    dans 1255849635:

    dans 1255781933:

    Bonjour,

    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
  • 22:27 modifié #17
    dans 1255849635:

    dans 1255781933:

    Bonjour,

    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.


    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 :o 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.
  • psychoh13psychoh13 Mothership Developer Membre
    22:27 modifié #18
    Boah on consomme 2 fois plus de mémoire mais on peut en mettre 2^32 fois plus... Donc quel est le problème... ;)
  • 22:27 modifié #19
    Le problème c'est que l'un des gros avantage de mon application c'était de consommer moins de RAM qu'une autre :p Ducoup j'ai du revoir le 64bits pour plus tard  :crackboom:-
    Et puis certes on peut en mettre plus, mais le "on peut" me gêne.. parce que tout le monde ne le fait pas  ;)
  • psychoh13psychoh13 Mothership Developer Membre
    22:27 modifié #20
    Quand bien même les configurations de bases des ordinateurs augmentent de toutes façons... :D
  • 22:27 modifié #21
    dans 1255869409:

    Quand bien même les configurations de bases des ordinateurs augmentent de toutes façons... :D

    Yes, fort heureusement :)
Connectez-vous ou Inscrivez-vous pour répondre.