2009-03-28 5 views
9

Nawet standardowa aplikacja Cocoa z pustym oknem, tworzona podczas tworzenia nowego projektu Cocoa w Xcode, wykorzystuje prawie 6 MB pamięci. Jaki jest tego powód? Czy można zmniejszyć użycie aplikacji, czy system OS X po prostu zarządza pamięcią w inny sposób dla aplikacji Cocoa?Dlaczego aplikacje Cocoa zużywają tak dużo pamięci?

Nie żebym narzekał. Wiem, że występ "nie ma już większego znaczenia" (edycja: mam na myśli to, że ma znaczenie mniejsze niż czytelność/łatwość konserwacji/czas programisty). Jestem po prostu ciekawy.

+2

Jesteś jedynym, który denerwuje pomysł, że wydajność już nie ma znaczenia? – BobbyShaftoe

+0

Nie chodzi o to, że wydajność nie ma znaczenia.Istnieje kompromis pomiędzy 100% optymalną wydajnością i korzystaniem z frameworka, który zwiększa obciążenie, ale znacznie ułatwia rozwój. Więc tak, 6MB na puste okno jest wysokie, ale jeśli framework pozwala tworzyć aplikacje w krótszym czasie, warto. –

+1

W jaki sposób mierzysz ile "pamięci RAM" używa aplikacja? Czy patrzysz na RPRVT w górę, czy coś innego? –

Odpowiedz

9

OS X robi dużo magii ze stronami pamięci współużytkowanej i kopiowaniem przy zapisie, więc istnieje duża szansa, że ​​nie zajmie tyle fizycznej pamięci RAM dla każdej aplikacji.

Można sprawdzić dokładnie jak bloki pamięci są odwzorowywane przez wykonanie:

sudo vmmap <PID of the process> 
+4

Istnieje również bardzo podstawowe uderzenie: wszystkie okna na osxie są podwójnie buforowane - więc 2 * szerokość okna * wysokość okna * 4 bajty będą używane po prostu otwarcie okna – olliej

1

Trochę się tu trzymam, ale myślę, że to dlatego, że wszystkie dodawane biblioteki muszą mieć sporo konfiguracji i nie ma potrzeby zbierania śmieci, więc po prostu marnują się pamięć; plus, nawet jeśli cała pamięć zostanie automatycznie wydana, będzie czekać do pierwszego bezczynnego zdarzenia, które jest po utworzeniu okna. Usuń niepotrzebne biblioteki/frameworki lub wymuś zbędne śmieci gdzieś po załadowaniu okna ze stalówki i zobacz, jak bardzo się obniży, jeśli będziesz się tym martwić.

Nie przejmuję się tym. Część pamięci może zostać zwrócona później, a reszta to cena, którą płacisz za potężne ramy.

4

Zależy od wszystkich używanych frameworków (API). Połącz to z alokacjami VM wykonanymi przez operatory niskiego poziomu.

Warto jedynie zmniejszyć ilość przydziałów sterty (ogółem), a także rozmiar rezydentny kodu. Upewniając się, że twoje struktury danych są przydzielane sprawnie i próbują skompilować się z tak znaną flagą optymalizacji "-Os" (optymalizacja rozmiaru). Nie ma zbyt wiele rzeczy, które możesz zrobić na temat VM zjedzonej przez Cocoa. Nie martwiłbym się tym.

3

Jest to oczywiście chwila „WTF” dla programistów w ogóle. Zazwyczaj chodzi o pytanie - dlaczego moja trywialna aplikacja zużywa tyle pamięci.

Odpowiedź dotyczy podstawy. Można argumentować, że 6MB to za dużo, ale tak naprawdę to nic.

Nierzadko zdarza się, że komputery mają obecnie 2 GB pamięci. Magazyn IMAC ma 4 GB. Celem całej branży komputerowej jest wykorzystanie wszystkich zasobów, jakie ma maszyna, aby mogła ona ewoluować.

Tak, należy unikać nieskuteczności, jeśli jest to możliwe (nie ładuj na przykład 5-milimetrowej tablicy przy uruchomieniu). Ale jeśli twoja wersja beta pokazuje, że jesteś sfałszowany, zatrzymaj ją na liście todo.

1

Czynnik, który nie jest bezpośrednio związany z kakao, ale ma zastosowanie do struktur ogólnie, jest taki, że narzut nie jest liniowy. Zwykle istnieje stała i zmienna "cena", jeśli chodzi o koszty ogólne, do korzystania z frameworka.

Po utworzeniu prostego pustego okna, stały narzut jest miażdżący, ale kiedy tworzysz aplikację z dziesiątkami okien, okien dialogowych, kontrolek i wszystkich, początkowy ustalony narzut staje się nieistotny, w stosunku do rozmiaru samej aplikacji.