2009-03-28 6 views
9

Même l'application Cocoa de fenêtre vierge standard qui est créée lorsque vous créez un nouveau projet Cocoa dans Xcode utilise presque 6 Mo de mémoire. Quelle est la raison de cela? Est-il possible de réduire l'utilisation d'une application ou OS X gère-t-il simplement la mémoire différemment pour les applications Cocoa?Pourquoi les applications Cocoa utilisent-elles autant de mémoire?

Pas que je me plains. Je sais que la performance "n'a plus d'importance" (edit: ce que je veux dire, c'est moins que la lisibilité/maintenabilité/le temps du programmeur). Je suis juste curieux.

+2

Suis-je le seul ennuyé par l'idée que la performance n'a plus d'importance? – BobbyShaftoe

+0

Ce n'est pas que la performance n'a pas d'importance.Il y a un compromis entre une performance optimale à 100% et l'utilisation d'un framework qui ajoute un peu de frais généraux mais facilite grandement le développement. Donc oui, 6 Mo pour une fenêtre vide est élevé, mais si le framework vous permet de développer des applications en moins de temps, ça vaut le coup. –

+1

Comment mesurez-vous la quantité de "RAM" utilisée par une application? Cherchez-vous à RPRVT en haut, ou autre chose? –

Répondre

9

OS X fait beaucoup de magie avec la mémoire partagée et les pages de copie à l'écriture, il est donc probable qu'il ne prenne pas autant de RAM physique pour chaque application.

Vous pouvez vérifier exactement comment les blocs de mémoire sont mis en correspondance en exécutant:

sudo vmmap <PID of the process> 
+4

Il y a aussi un hit très basique: toutes les fenêtres sur osx sont à double tampon - donc 2 * largeur de fenêtre * hauteur de la fenêtre * 4 octets vont être utilisés juste en ouvrant une fenêtre – olliej

1

Je suis un peu hors sujet ici, mais je suppose que c'est parce que toutes les bibliothèques qui ont été ajoutées doivent faire beaucoup de configuration et il n'y a pas besoin de collecte des ordures, donc elles se perdent Mémoire; De plus, même si toute la mémoire était auto-libérée, elle attendrait le premier événement inactif, soit après la création de la fenêtre. Supprimez les bibliothèques/frameworks inutiles, ou forcez un garbage collecter quelque part après avoir chargé la fenêtre de la plume et voir à quel point ça tombe si vous êtes si concerné.

Je ne suis pas concerné par cela. Une partie de la mémoire pourrait être retournée plus tard, et le reste est le prix que vous payez pour un framework puissant.

4

Dépend de tout le cadre (API) que vous utilisez. Combinez cela avec les allocations de VM effectuées par des opérations de bas niveau.

Cela ne vaut que la peine d'essayer de réduire l'allocation de tas (total), ainsi que la taille résidente du code. Assurez-vous que vos structures de données sont allouées efficacement et essayez de compiler avec le fameux indicateur d'optimisation "-Os" (optimisation de la taille). Il n'y a pas grand-chose à faire sur la VM mangée par Cocoa. Je ne m'en inquiéterais pas vraiment.

3

Ceci est clairement un moment « WTF » pour les développeurs en général. La question est généralement: pourquoi mon application triviale utilise-t-elle autant de mémoire?

La réponse est à la structure sous-jacente. Vous pourriez argumenter que 6 Mo c'est trop, mais vraiment, ce n'est rien.

Il n'est pas rare de voir des ordinateurs dotés de 2 Go de mémoire ces jours-ci. Le stock IMAC est de 4 Go. Le but de l'industrie informatique est d'utiliser toutes les ressources d'une machine pour qu'elle continue à évoluer. Oui, vous devriez éviter les inefficacités lorsque cela est possible (par exemple, ne pas charger un réseau de 5 millions de points au démarrage). Mais à moins que votre version bêta ne vous montre fauchée, gardez-la sur la liste des todo.

1

Un facteur qui n'est pas directement lié au cacao mais qui est valable pour les structures en général est que le temps système n'est pas linéaire. Il y a généralement un «prix» fixe et variable, en termes de frais généraux, pour utiliser le cadre. Lorsque vous créez une fenêtre vierge simple, le temps système fixe est écrasé, mais lorsque vous créez une application avec des dizaines de fenêtres, boîtes de dialogue, contrôles et tout, le temps système initial fixe devient négligeable, par rapport à la taille de l'application elle-même.

Questions connexes