kategoria: AMOS
[#1] Dlaczego programy w Amosie zajmują tak dużo?
Zastawiam się dlaczego programy po skompilowaniu zajmują tak dużo. Moja gierka waży prawi pół mega a prosty kod z paroma komendami 10kb. Od razu mówię, że nie dodaje biblioteki amos.library do programu. Użycie squasha zmniejsza program o parędziesiąt kilo. Sądzę, że coś jest nie tak bo skoro taka prosta gra waży pół mega to taki logion czy astral musiały by wazyć po 10 mega.


Benedykt Dziubałtowski
[#2] Re: Dlaczego programy w Amosie zajmują tak dużo?

@Benedykt Dziubałtowski, post #1

To jest proste. Przy kompilacji linkowane są pliki *.lib z katalogu APSystem.
[#3] Re: Dlaczego programy w Amosie zajmują tak dużo?

@cholok, post #2

Gdzie ta opcja jest. Szukam tego w kompilatorze i nie widzę żeby to szło gdzieś wyłączyć.

Benedykt Dziubałtowski
[#4] Re: Dlaczego programy w Amosie zajmują tak dużo?

@Benedykt Dziubałtowski, post #3

Nie da się wyłączyć. Tak to działa. Użycie jednej komendy powoduje zlinkowanie całego extensiona. Prostota ma swoją cenę.
[#5] Re: Dlaczego programy w Amosie zajmują tak dużo?

@cholok, post #4

Ale to oznacza, ze kazde kolejne kilobajty kodu juz nie beda powodowac lawinowego przyrostu :)
[#6] Re: Dlaczego programy w Amosie zajmują tak dużo?

@Benedykt Dziubałtowski, post #1

Cos jest nie tak. Wiekszosc bibliotek wlaczanych do programu w czasie kompilacji powinna zajmowac nieco ponad 100kb plus kod twojej gry i banki pamieci, to nastepne gora 100kb zatem wychodzi 200kb. Czyli "cos" zezarlo jeszcze raz tyle pamieci ile powinno i to "cos" nie jest przyjazne.
[#7] Re: Dlaczego programy w Amosie zajmują tak dużo?

@cholok, post #4

No to tylko pogratulować kompilatora, za wrzucanie do kodu wynikowego nie używanych funkcji.

Tak przy okazji, to takie zjawisko nie występuje tylko w AMOSie, tutaj jeden biedak otrzymuje kod plik powyżej 500kB przy programie typu "hello world" .

Jeśli AMOS nie ma optymalizacji kompilacji, to pozostaje ci np wykonanie tej samej operacji stosując inne polecenia (jeśli się da).

Ostatnia aktualizacja: 17.01.2013 17:14:39 przez rafgc
[#8] Re: Dlaczego programy w Amosie zajmują tak dużo?

@Benedykt Dziubałtowski, post #1

A ile zajmuje sam plik źródłowy bez kompilacji ? Czy nie jest tak, że razem z programem masz zapisane również banki? Spróbuj przed zapisem dać komendę "Erase All" i dopiero taki plik skompilować.
[#9] Re: Dlaczego programy w Amosie zajmują tak dużo?

@at0m, post #8

Kod zajmuje koło 330kb. Da się dograć banki do pliku wynikowego?

Benedykt Dziubałtowski
[#10] Re: Dlaczego programy w Amosie zajmują tak dużo?

@rafgc, post #7

AMOS tak ma. Kompilatory Basica chyba rzadko są w stanie wygenerować zoptymalizowany wielkościowo kod - nie używa się przecież instrukcji preprocesora w rodzaju #include. Zresztą same instrukcje Basica są mocno wysokopoziomowe, więc linkowane biblioteki muszą być duże. To nie jest C.
[#11] Re: Dlaczego programy w Amosie zajmują tak dużo?

@wali7, post #10

No dobra tylko dlaczego takie rycerze morku mają kod 5 razy mniejszy niż mój a gra jest przecież dożo bardziej rozbudowana.


Benedykt Dziubałtowski
[#12] Re: Dlaczego programy w Amosie zajmują tak dużo?

@Benedykt Dziubałtowski, post #11

Może jakaś Crunch-Mania lub PowerPacker?
[#13] Re: Dlaczego programy w Amosie zajmują tak dużo?

@Benedykt Dziubałtowski, post #9

Kod zajmuje Ci 330 kB czy plik .amos z tym kodem? Raczej to drugie. Zanim zapiszesz źródłówkę z poziomu edytora Amosa, wyczyść sobie banki. Wówczas źródłówka zajmie mniej, a i plik wykonywalny będzie mniejszy.
[#14] Re: Dlaczego programy w Amosie zajmują tak dużo?

@mailman, post #13

Chociaż nie będzie to kilka-kilkanaście kb, co jak najbardziej możliwe jest w przypadku pliku wykonywalnego stworzonego ze źródeł w C.
Na pewno nie zaszkodzi też zrobić tego, o czym pisze Buli - stworzyć skompresowany plik wykonywalny.
[#15] Re: Dlaczego programy w Amosie zajmują tak dużo?

@wali7, post #10

A co tu ma do rzeczy czy to C czy nie, nie używane funkcje nie powinny być dołączane do pliku wynikowego, widocznie ktoś poszedł w Amosie na łatwiznę i wykorzystanie jednego polecenia z danego zbioru powoduje dołączanie całej biblioteki (tak jak wczytywanie jakiejś #?.library aby skorzystać z jednej funkcji) do wyniku. W czym tkwiłby problem, gdyby zamiast podłączania całej biblioteki pozostawić z niej tylko polecenia wykorzystywane w programie (chyba, że jedno polecenie samo w sobie korzysta z innych poleceń danej biblioteki)? Optymalizacja kodu a wycinanie niepotrzebnych rzeczy, to dwie różne rzeczy (choć i jedno i drugie można nazwać optymalizacją, z tym, że w przypadku tej drugiej opcji nie potrzeba żadnych algorytmów, tylko wykluczenia kodu, do którego nie ma żadnych odwołań).
[#16] Re: Dlaczego programy w Amosie zajmują tak dużo?

@rafgc, post #15

Kompilatory Basica rzadko są specjalnie zoptymalizowane - w końcu Basic to język interpretowany, a możliwość jego kompilacji jest tylko opcją.
A zwróć też uwagę na fakt, że instrukcje Basica są dosyć wysokopoziomowe: przykładowo, aby kompilator Basica przeprowadził skuteczną optymalizację komendy w rodzaju I=I+B należałoby wykonać dokładną analizę kodu (automatyczną) czego można się spodziewać w I, oraz B: liczby stało, czy zmiennoprzecinkowej i o jakiej precyzji. Basic (w odróżnieniu od m.in. C) nie definiuje tak dokładnie typów zmiennych, więc linkowana procedura musi obejmować wszystkie możliwości (z których w programie wynikowym zostanie wykorzystana tylko część) - musi być duża i mniej wydajna (bo gdzieś trzeba sprawdzić typ i wykonać skok do właściwej podprocedury obsługującej go).
Przykładem względnie wysokopoziomowej instrukcji w C jest printf: zawarte w niej możliwości formatowania i przyjmowania najrozmaitszych typów argumentów czynią ją naprawdę sporą (warto sprawdzić jak wpływa na wynikowy kod jej dolinkowanie). Po przeciwnej stronie jest inkrementacja ++ - w wielu przypadkach kompilowana do jednej instrukcji CPU.
A Basic (czyli także AMOS) ma wyłącznie instrukcje dosyć uniwersalne (co z jednej strony jest ich zaletą), ale właściwie nie nadające się do optymalizacji w fazie linkowania. Nawet jeśli instrukcje nieużywane nie są linkowane (to akurat da się zrobić dosyć prosto), to i tak procedury tych dolinkowanych MUSZĄ być duże. Więc plik wynikowy będzie duży.
PS. Można to prosto sprawdzić doświadczalnie: napisać cokolwiek np.
10 print "qwerty"
20 rem pusty komentarz
30 rem if 10 then print "uiop"
40 goto 10
następnie skompilować to. Zanotować rozmiar i usunąć rem z linii 30, ponownie skompilować. Jeśli długość kodu wynikowego będzie się różnić bardzo nieznacznie, to będzie znaczyć, że w obu przypadkach zostały dolinkowane nieużywane instrukcje.

Ostatnia aktualizacja: 17.01.2013 22:31:51 przez wali7
[#17] Re: Dlaczego programy w Amosie zajmują tak dużo?

@mailman, post #13

Zrobiłem tak jak radziłeś. Rozmiar gry spadł z 440kb na 220. Moim zdaniem nadal za dużo (aczkolwiek mogę się mylić). Nie mniej niezły szok. Erase all w trybie direct zastosowałem.


Benedykt Dziubałtowski
[#18] Re: Dlaczego programy w Amosie zajmują tak dużo?

@Benedykt Dziubałtowski, post #17

"Rozmiar gry spadł z 440kb na 220"

Nie rozmiar gry, tylko pliku po kompilacji a rozmiar gry jest jeszcze wiekszy niz owe 440kb (bo te banki i tak beda zaladowane do pamieci z dysku/dyskietki) czyli ogolnie twoja gra wymaga pewnie juz ponad pol megabajta.
Troche duzo jak na gre logiczna i warto by wyjasnic dlaczego tyle zajmuje. Moze napisz co jest w tych bankach i ile kb one zajmuja.
[#19] Re: Dlaczego programy w Amosie zajmują tak dużo?

@selur, post #18

Same banki to jest niespełna 40kb. Jest kilka obrazków +moduł muzyczny to może razem warzyć coś koło 200kb.

Gra działa na 512 kb ale bez muzyki. Efekty dźwiękowe są dostępne na takiej ilości pamięci.


Benedykt Dziubałtowski
[#20] Re: Dlaczego programy w Amosie zajmują tak dużo?

@Benedykt Dziubałtowski, post #17

1. Wczytaj edytor AMOS-a
2. Wczytaj swój plik .amos i NIE URUCHAMIAJ
3. Z menu Project wybierz opcję INFORMATION
4. Interesuje Cię tam TEXT LENGTH oraz BANK LENGTH. Ta druga powinna wynosić 0 chyba, że tworzysz program, który ma nie doczytywać danych i wszystko będzie w jednym pliku. Zakładam, że tak nie robisz.
5. Skopiuj cały tekst i wklej do nowego projektu. Banki powinny się wyczyścić.
6. Zapisz nowy projekt. Powinien być odpowiednio mniejszy.
7. Skompiluj.
[#21] Re: Dlaczego programy w Amosie zajmują tak dużo?

@wali7, post #10

Kompilatory Basica chyba rzadko są w stanie wygenerować zoptymalizowany wielkościowo kod


rzadko, ale jednak, taki PureBASIC generuje kod nawet krotszy od C.
[#22] Re: Dlaczego programy w Amosie zajmują tak dużo?

@wali7, post #16

czego można się spodziewać w I, oraz B: liczby stało, czy zmiennoprzecinkowej i o jakiej precyzji.


to sie rozstrzyga na etapie kompilacji.
[#23] Re: Dlaczego programy w Amosie zajmują tak dużo?

@mailman, post #20

tez bym tak zrobil :)... tylko jeszcze dla pewnosci w opcjach compiler setup itd.. zrob na NO dolaczenie amos.library, nastepnie Compile i pokaze w okienku dlg. kodu wynikowego.
[#24] Re: Dlaczego programy w Amosie zajmują tak dużo?

@gx, post #23

To jest bez znaczenia, jeżeli u Benka exe ma 400 kB. Biblioteka AMOS-a to tylko 46 kB.
[#25] Re: Dlaczego programy w Amosie zajmują tak dużo?

@mailman, post #24

Jednak kompilator nieco optymalizuje kod. Zwykłe print zajeło 11 KB, menu edytor 100 KB, zaś przykładowa gierka Galaxy (30 KB źródeł) 50 KB. Chyba jednak coś nie gra.
[#26] Re: Dlaczego programy w Amosie zajmują tak dużo?

@cholok, post #25

Bo u Benka na 100% banki się nie czyszczą, choć mogę się mylić i może faktycznie coś jest z kodem.
[#27] Re: Dlaczego programy w Amosie zajmują tak dużo?

@Benedykt Dziubałtowski, post #9

Kod zajmuje koło 330kb. Da się dograć banki do pliku wynikowego?


Z tego co wiem to wszystkie załadowane banki domyślnie zapisują się razem z programem amosa. Po skompilowaniu takiego pliku banki dołączone są do pliku wynikowego. Jeśli chcesz mieć sam program to przed zapisem należy skasować banki komendą "Erase All"
[#28] Re: Dlaczego programy w Amosie zajmują tak dużo?

@at0m, post #27

No właśnie nie potrafiłem sobie tej nazwy polecenia przypomnieć. "Erase All" czyści banki
[#29] Re: Dlaczego programy w Amosie zajmują tak dużo?

@mailman, post #28

Już to zrobił, ale i tak za dużo.
[#30] Re: Dlaczego programy w Amosie zajmują tak dużo?

@cholok, post #29

To najlepiej zrobić, copy - paste całego źródła do nowego okna, tam zapisać bez uruchamiania i ten plik skompilować.
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem