Re: zmniejszenie WinSxS

Autor: Sempiterna <rzopa_at_amorki.pl>
Data: Wed 02 Sep 2009 - 20:11:06 MET DST
Content-Type: text/plain; format=flowed; charset="iso-8859-2"; reply-type=response
Message-ID: <4a9eb557@news.home.net.pl>

Użytkownik "Grzegorz Niemirowski" <gnthexfiles@poczta.onet.pl> napisał w
wiadomości news:h7m2ji$1vag$1@opal.icpnet.pl...
> bardzo rzadko. Nie wiem o co chodzi z narzutami procedur. W asmie tak
> samo skaczesz do funkcji, język nie ma tu nic do rzeczy.

Której OIDP definicję, czy jak to się nazywa, tworzysz w deklaracji, a
ma służyć jedynie ułatwieniu, zamiast pisać "skocz do 0x45385652",
definiowac ten adres jako etykietę np. "Basia" i pisać "skocz do Basia".
Oglądając asembler windziany, nie mogę się oprzeć wrażeniu, że skaczę
nie do Basi, jak wyżej, tylko do całej procedury, która może być mi na
plaster... No, truuudno, skoro tego wymaga wielozadaniowość...

> Ja rozumiem, że fajnie jest mieć mały, zgrabny system. Ale napisane go
> wcale nie jest takie proste jak myślisz.

Nigdzie tak nie twierdziłem.

> Bardzo polecam poczytać
> http://thedailywtf.com/Articles/That-Wouldve-Been-an-Option-Too.aspx

To przy okazji. Mnie chodziło o to, by (nie bij, przykłady będą totalnie
błędne, chodzi mi jednak o przedstawienie sprawy, a do tego wystarczą)
program niej-więcek taki:

label Basia=0x4566527
LDA $A021 ; zaladuj akumulator wartością z komórki
CMP $FACD ; porównaj z komórką o adresie...
INA ; zwiększenie akumulatora o jeden
BNE Basia ; Skocz do Basia, jeśli nie równe
JMP $FCE2 ; Skocz do...

Aby nie skutkowało to wynikiem o objętości wielokilobajtowej, tylko
tyle, co wynika z kodu.
Jak zobacze pod C (czy którąś z odmian), że kompilacja (mam na myśli
objętość kodu wejściowego)

main
{
printf (cuś tam, np. dzień dobry)
}

nie spowodowała doklejenia tej, tej, tamtej i jeszcze 10 innych,
niepotrzebnych tu bibliotek.

Zdaje sobie z tego sprawę, że w zunifikowanym systemie, jakim jest
Windows, czy nawet Linux, nie jest to takie proste, jak pod DOSem, gdzie
program skacze do procecury, a potem instrukcją RET, albo analogiczną,
zwraca sterowanie systemowi (nie mówię o programach rezydentnych, choć w
C64 udało mi się już podpiąć pod obsługę klawiatury zmianę koloru
brzegów ekranu, zależnie od naciśniętego klawisza). Tu jeszcze forma
okienka, przyciski, kolory, kształty... ale ile to w sumie zje? Skoro
działający program wcale nie najboższy, może mieć kilka, kilkanaście
kilobajtów, to czemu się spotyka programy mogące tyle samo, a mające
niekiedy po kilkaset kilobajtów, czy nawet ponad megabajt...? Co ten
dodatkowy kod robi, chyba nie karmi procesora truskawkami? Rozumiem, że
np. do obróbki dużych projektów trzeba zarezerwowac dużo pamieci, bo
dane muszą się gdzieś pomieścić, ale czy od razu sam program musi od
wuja aż tyle miejsca zajmować? Przecież to tylko dodatkowa robota dla
proca, a jak nie, to zbędne bajty, które mogły być spożźytkowane
pożyteczniej w innym miejscu...

To nie jest problem wczorajszy, żebym był choć trochę sprawiedliwy...
W Turbo Pascal 3.0 skompilowanie: (to już powinno działać, mimo, że
ostatni raz macałem to jakieś 18 lat temu)

program hej;
begin;
Writeln ('Dzień dobry, jak szanowne zdrowie?');
end.

dawało wynik ok. 30 kilobajtów kodu... po ch... ja się zapytam?
Podobna rzecz w asemblerze zajęła cos koło 37 bajtów, może 100... A
działała tak samo, dokładnie tak samo...
Już Turbo 7.0 jest lepszy, bo jego kompilat, właśnie sprawdziłem, nawet
zadzialał, zajął ok. 2.2 kB.
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?

-- 
"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 Wed Sep 2 20:15:02 2009

To archiwum zostało wygenerowane przez hypermail 2.1.8 : Wed 02 Sep 2009 - 20:42:00 MET DST