Quantification des questions pour 64-bit runtime
Dans certaines situations, il peut y avoir une bonne raison d'utiliser les types standard au lieu de NSInteger
: "inattendue" de la mémoire gonfler dans un système 64 bits.
Il est clair que si un entier est de 8 au lieu de 4 octets, la quantité de mémoire occupée par les valeurs est doublé. Étant donné que chaque valeur est un entier, cependant, vous devriez généralement pas s'attendre à l'empreinte mémoire de votre application afin de double. Cependant, la façon dont Mac OS X alloue de la mémoire, des changements en fonction de la quantité de mémoire requise.
Actuellement, si vous demandez de 512 octets ou moins, malloc
arrondi au prochain multiple de 16 octets. Si vous demandez plus de 512 octets, cependant, malloc
arrondi au prochain multiple de 512 (au moins 1024 octets). Supposons ensuite que vous définissez une classe qui -- entre autres -- déclare cinq NSInteger
variables d'instance, et que sur un système 32 bits, chaque instance occupe, disons, 272 octets. Sur un système 64 bits, les instances serait, en théorie, exiger 544 octets. Mais, en raison de l'allocation de mémoire de la stratégie, chacun va effectivement occuper de 1024 octets (un quasi quadruplement). Si vous utilisez un grand nombre de ces objets, l'empreinte mémoire de votre application peut être considérablement plus élevée que celle que vous pourriez attendre. Si vous avez remplacé l' NSInteger
variables sint_32
variables, vous devez utiliser uniquement de 512 octets.
Lorsque vous choisissez ce scalaire à utiliser, par conséquent, assurez-vous de choisir quelque chose de sensible. Est-il une raison pourquoi vous avez besoin d'une valeur de plus que vous avez besoin dans votre application 32 bits? À l'aide d'un entier de 64 bits pour compter un nombre de secondes est peu probable que nécessaire...