Re: zmniejszenie WinSxS

Autor: Sempiterna <rzopa_at_amorki.pl>
Data: Thu 03 Sep 2009 - 00:19:02 MET DST
Content-Type: text/plain; format=flowed; charset="iso-8859-2"; reply-type=response
Message-ID: <4a9eef56$1@news.home.net.pl>

Użytkownik "Grzegorz Niemirowski" <gnthexfiles@poczta.onet.pl> napisał w
wiadomości news:h7mgub$2fnp$1@opal.icpnet.pl...
> Znów mieszasz bo porównujesz instrukcję warunkową z wywołaniem funkcji
> bibliotecznej. Ponadto zapominasz chyba, że w kodzie asemblerowm
> również woła się różne funkcje oferowane przez system operacyjny. To,
> że kod jest napisan w asemblerze wcale nie oznacza, że wszystko robi
> sam. Jak chcesz z poziomu asemblera coś wyświetlić? Będziesz mazać po
> pamięci karty graficznej?
> Co do linkowania bibliotek to nie widzę problemu. Co za różnica czy
> exe ma 10 czy 20 kB? To nie wpływa na wydajność. Odnośnie rozmiaru
> plików

Skoro różna ilość kodu po drodze nie zmienia szybkości działania
programu, to albo gdzieś są puste pętle opóźniające, albo wuchta kodu
jest na zalepienie dziur w płocie. Albo procek działa jakoś magicznie...
Poza tym, odwrociłeś nieco kotka w przeciwną stronę - chodziło mi o małę
programy dające nie wiem po co duży kod wynikowy. Porównanie w Pascalu
dostałeś.

> wykonwalnch to polecam poszukać odpowiedniego wątku na
> pl.comp.programming

Coś kosztem czegoś, albo pętle, albo niepotrzebny kod, albo jakaś amba,
magicznie latająca po bajtach i wcinająca po.żądane kawałki w
odpowiednich momentach.
Bo nie przetłumaczysz mi, że te same / takie same programy, wymagają
coraz większej ilości kodu. Śmiem twierdzić, że to coraz bardziej polega
na tym, ze skoro sprzęt coraz szybszy, to już nie trzeba tak bardzo
pieścić się z mocożernością...

> To już się programistów pytaj co ten kod robi. System wcale nie każe
> kompilatorowi generować wielkiego kodu. Poza tym pamiętaj, że w
> programie

To kompilator nie jest programem samodzielnym?

> może być nie tylko kod napisan przez Ciebie ale także sprawdzający
> wyjątki, np. wyjście poza zakres tablicy.

Której akurat może w programie nie być... Poza tym, ileż to bajtów
programu musi być do sprawdzenia tego przekroczenia użyte?

>> Jeśli więc program może zająć 100 bajtów (dobra, dołożę drugie 100 na
>> podprogramy kontrolne dołączane przez kompilator), to po co ma
>> zajmować 30 kilo, czy choćby 2.2?
>
> Widocznie są linkowane statycznie jakieś biblioteki. Jak nie chcesz
> ich używać to nie używaj, tylko potem będziesz musiał pisać wszystko
> sam. Pomyśl

Napisałem -
program hej;
begin;
writeln ('Cześć, jak się masz?');
end.
I już, napisałem wszystko sam, wystarczy.

> co się stanie jak w swoim przkładzie dodasz jeszcze wświetlanie
> wartości jakiejś zmiennej. Kod w asmie Ci się rozrośnie, w TP będzie
> taki sam.

Bo kod z asemblera, to raczej nie może być mniejszy, niż sam jest, jasne
zatem, że jak się doda jakąś procedurę, to te 20-30 bajtów przybędzie.

> Jeszcze raz napiszę, że dziwne wydaje mi się to skojarzenie:
> asembler - robimy wszystko sami, język wysokiego poziomu: używam
> bibliotek. Jak np. w asemblerze pod Windows wyświetlisz okienko?
> Korzystając z WinAPI:
>
> ;
> ; ===========================================================
> ; \Win32ASM\Src\SzDialog\SzDialog.asm
> ; ===========================================================
> ; Adam Błaszczyk
> ; "Win32ASM. Asembler w Windows"
> ; Wydawnictwo Helion, 2004
> ; ===========================================================
> ; Kompilacja : "r.bat", "d.bat", "nmake"
> ; Opis : Szablon programu opartego na dialogu
> ; ===========================================================
>
> include ..\..\makro.inc ; dołączamy definicje makr
>
> INCLUDEX kernel32 ; używamy KERNEL32
> INCLUDEX user32 ; używamy USER32
>
> ID_DLG_MAIN = 100
>
> .data? ; dane niezainicjalizowane
> hInstance dd ?
>
> .data ; dane zainicjalizowane
>
> .code ; segment kodu (sekcja kodu)
>
> DlgProc proc hDlg,uMsg,wParam,lParam:DWORD
> pushad
>
> .IF uMsg==WM_CLOSE
> invoke EndDialog,hDlg,0
>
> .ELSEIF uMsg==WM_COMMAND
>
> .ENDIF
>
> popad
> xor eax,eax
> ret
> DlgProc endp
>
> Start: ; początek programu
>
> invoke GetModuleHandle,NULL
> mov hInstance,eax
>
> invoke DialogBoxParam,hInstance,ID_DLG_MAIN,0,ADDR DlgProc,0
>
> invoke ExitProcess,0 ; powrót z programu
>
> END Start ; tu zaczyna się program

Czyli to nie jest czysty asembler, tylko hybryda tak zatytułowana.
Wyrysowanie okienka, daję powiedzmy, 200-300 bajtów, program drugie 200,
na różności, procedury, pomnożenie przez 2, na "przyklepanie" drugie
pomnożenie... dwa kibobajty mamy, a nie np. 100 razy tyle.
Wolę często napisać dwa kilobajty sam, niż z jakichś przypadłości, czy
to kompilatora, czy bibliotek, otrzymać wynik nawet półmegabajtowy... a
program miał służyć do dekodowania pewnego prostego szyfru, którego
algorytm zmieści się może w 2-3 kilobajtach tekstu... W wolnej chwili
pokuszę się o przeliczenie tego na kalkulatorze...

No, jeszcze bym zrozumiał, gdyy kompilator tworzył po prostu
zarezerwowane miejsce, aby od razu po wczytaniu programu mieć gotową
przestrzeń roboczą, aby nie musieć rezerwować jej osobno...

Cóż, wyrosłem w czasach, kiedy każdy wolny bajt był cenny...

-- 
"E, tam, oszukaństwo, oszukaństwo... Zwyczajna polityka!"
(C) Kazimierz Pawlak, do Kargula, o pomalowanej czarną pastą świni;
"Nie ma mocnych" - druga część tryptyku.
Received on Thu Sep 3 00:20:03 2009

To archiwum zostało wygenerowane przez hypermail 2.1.8 : Thu 03 Sep 2009 - 00:42:01 MET DST