2009-02-27 4 views
3

Cocoa fournit des zones de mémoire alignées sur les pages qu'il appelle Memory Zones, et fournit quelques fonctions de gestion de la mémoire qui prennent une zone comme argument.Avez-vous déjà utilisé NSZoneMalloc() au lieu de malloc()?

Supposons que vous ayez à allouer un bloc de mémoire (pas pour un objet, mais pour des données arbitraires). Si vous appelez malloc(size), le tampon sera toujours alloué dans la zone par défaut. Cependant, quelqu'un peut avoir utilisé allocWithZone: pour allouer votre objet dans une autre zone en plus de la valeur par défaut. Dans ce cas, il semblerait préférable d'utiliser NSZoneMalloc([self zone], size), ce qui maintient votre tampon et votre objet propriétaire dans la même zone de mémoire.

Suivez-vous cette pratique? Avez-vous déjà utilisé des zones de mémoire?

Mise à jour: Je pense que Stack Overflow a tendance à répondre aux questions sur les sujets de bas niveau avec un cours sur l'optimisation prématurée. Je comprends que les zones ont probablement plus d'importance en 1993 sur le matériel NeXT qu'aujourd'hui, et une recherche sur Google montre clairement que pratiquement personne ne les concerne. Je demande quand même, pour voir si quelqu'un pourrait décrire un projet où ils ont utilisé des zones de mémoire.

+0

Je n'ai jamais vraiment vu l'avantage des zones de mémoire non plus, alors je suis content que vous ayez posé cette question. – Alex

Répondre

2

J'ai écrit des logiciels pour NeXTStep, GNUstep sous Linux et Cocoa sous Mac OS X, et je n'ai jamais eu besoin d'utiliser des zones mémoire personnalisées. La condition qui suggèrerait une bonne amélioration du logiciel n'est jamais apparue, ou n'a jamais été détectée comme significative.

0

Si vous vous trouvez en train de faire cela, vous travaillez probablement à un niveau inférieur à ce que vous devriez vraiment être. Le sous-système les ignore à peu près; tous les appels à +alloc ou tels vous obtiendrez des objets dans la zone par défaut. malloc et NSAllocateCollectable sont tout ce que vous devez savoir.

+0

Donc, vous dites essentiellement que je n'aurais pas dû poser ma question? – benzado

+1

+ alloc renvoie uniquement un objet dans la zone par défaut, car il transmet la zone par défaut à + allocWithZone: qui est l'allocateur _real_. –

1

Vous avez absolument raison dans l'ensemble de votre question, mais en pratique, personne n'utilise vraiment les zones. Comme la page que vous liez le met:

Dans la plupart des cas, l'utilisation de la zone par défaut est plus rapide et plus efficace que la création d'une zone séparée.

L'avantage de faire votre propre zone est:

Si un défaut de page se produit lorsque vous essayez d'accéder à l'un des objets, chargement de la page apporte tous les objets connexes, ce qui pourrait réduire de manière significative le nombre de fautes de page futures.

Si un défaut de page se produit, cela signifie que le système a été récemment choses pageant et est lent donc de toute façon, et que ce soit votre application n'est pas responsable ou la solution est dans la partie de votre application qui a alloué trop mémoire à la fois en premier lieu. Donc, au fond, la question est: "pouvez-vous prouver que vous avez vraiment besoin de créer votre propre zone pour résoudre un problème de performance ou rendre votre application rapide", et la réponse est "non".

+0

Je sais que vous vouliez bien dire, mais votre dernier paragraphe est un peu grossier.Ce n'est pas ma question du tout; vous supposez que je ne suis intéressé que par trouver de la magie pour optimiser la poussière de lutin et que je n'ai pas lu ou compris le document auquel je me suis connecté. – benzado

+0

Non, je ne suppose pas une telle chose. Ce que je veux dire, c'est que le seul but des zones est de rendre les choses plus rapides, et elles ne font jamais assez vite, à quelque fin que ce soit, pour justifier leur utilisation. –

+0

Je ne pense pas que Peter essaye de dire que c'était VOTRE question, juste que c'est LA question à se poser quand il s'agit d'utiliser ou non des zones personnalisées. C'est une question rhétorique à se poser pendant le processus de conception. –

Questions connexes