2009-10-03 5 views

Répondre

7

La mémoire sous Mac OS X ne fonctionne pas de la même manière que sur OS X Touch. Notamment, une machine de bureau a beaucoup plus de RAM et va échanger de la mémoire sur le disque que les applications exigent plus. De plus, de nombreuses applications sont en concurrence pour les ressources.

La vraie question est qu'essayez-vous d'accomplir?

Si la réponse est mémoire utiliser efficacement, alors vous devez vous concentrer sur les allocations réduisant au minimum, vous assurant d'avoir aucune fuite, et veiller à ce que vos structures de données sont optimisées. Utilisez ObjectAlloc dans Instruments pour analyser l'utilisation de la mémoire et déterminer où se concentrer.

Cependant, si la réponse est plus le long des lignes de que j'ai un sous-système de mise en cache qui bénéficie de beaucoup de mémoire, mais je veux donner au système alors que d'autres applications augmentent leurs demandes, alors vous vouloir étudier le support Snow Leopard's Caching and Purgeable Memory. Notamment, les deux API fournissent un moyen de mettre en cache de manière agressive des données tant qu'elles sont des ressources du système, en reculant ou en redonnant au système lorsque leur pression est la mémoire.

+0

Merci Bill. J'essaie en effet de créer un cache de données .. images dans ce cas, que le système peut récupérer s'il en a besoin. Le protocole NSDiscardableContent ressemble exactement à ce que je recherche. Génial à voir construit dans le système. Yay pour Snow Leopard! –

+0

Jetez aussi un coup d'œil à NSCache ... – bbum

0

Je pense que vous pouvez raisonnablement vous attendre à ce que la plupart des Mac modernes aient au moins 1 Go de RAM (probablement 2, et peut-être même 4+). Si votre application provoque des erreurs malloc et/ou manque de mémoire, alors vous avez mal fait et vous devez repenser ce que vous stockez en mémoire.

Donc, en un mot, non il n'y en a pas. Le Mac n'est pas aussi limité en mémoire que l'iPhone, donc il n'en a pas besoin.

+0

Vous supposez que la mémoire vive de 1 Go du Mac est disponible. Si d'autres applications utilisent 99% de RAM, votre application ne dispose que de 1% de RAM disponible pour son propre usage. Vous pourriez dire qu'il y a moins besoin de la fonctionnalité sur un Mac, mais ce n'est pas la même chose que pas besoin. –

+1

@jeremy La mémoire sur les systèmes de bureau ne fonctionne pas vraiment de cette façon. @Dave En fait, il y a un besoin considérable de gérer efficacement la mémoire et il n'est pas rare qu'une application ajuste l'utilisation de la mémoire aux capacités du système pour obtenir des performances maximales.Heureusement, il existe une API pour cela (dans Snow Leopard). – bbum

2

Laissez le noyau s'inquiéter de la gestion de la mémoire.

L'iPhone n'utilise pas de mémoire virtuelle, donc ses contraintes de mémoire sont très concrètes. La seule option dont dispose le noyau est de vous avertir avant qu'il ne se termine par vous. C'est pourquoi l'iPhone a des avertissements de mémoire. Le noyau du bureau a beaucoup plus d'options disponibles pour faire face à des conditions de faible mémoire, il est donc préférable de le laisser faire son travail. Il ne sert à rien de lancer agressivement la libération de la mémoire qui a déjà été échangée sur le disque.

0

Il n'y a pas d'équivalent direct, autant que je sache. Vous pourriez probablement vérifier si les allocations d'objets échouaient, puis envoyer une notification pour permettre à d'autres parties de votre application de les écouter.

En pratique, la plupart des applications ne dérangent pas. Dans les situations où vous commencez réellement à ne pas allouer d'objets (mémoire virtuelle épuisée, disque de démarrage complètement plein, etc.), vous vous dirigez probablement vers un crash de toute façon.

Questions connexes