Borland compileri referanslari kaldirabiliyor 8k'da onu denemistim. Ben DASM'dan hoslanmiyorum (bazi programlarda problem yasadim).
Kodda radikal degisikliklerden kacinmaya calisiyorum. Sorun su:
Ayni isi goren farkli librarylerde farkli fonksiyonlar var. Eger ayni library icersinde o isi goren bir fonksiyon varsa diger librarydeki degil, kullanilan librarydeki cagirlilmali. Aksi halde compilerlarda bunu ayiklamak bayagi ugrastiriyor.
Biraz daha oynayayim ben en iyisi
Size ufaltmak icin bir kac yol daha var ama dedigim gibi koda fazla mudahale etmek istemiyorum. Yapilacak baska birsey ise libraryleri static link etmeyerek, direkt fonksiyonlari kernel apileri ile cagirmak!
Delphi portunda buna paralel birsey gerceklesmis olabilr. Incelemek lazim.
Kayıt: Mar 13, 2003 Mesajlar: 188 Nereden: İstanbul
Tarih: Tue Nov 29, 2005 4:23 pm Mesaj konusu:
saçmalıklar var, doğrudur, onlar bi kenara, windows.pas'ı eklediğim için advapi32.dll vs gibi alakasız tonla referans oluşuyor.onları da ayıklarsam herhangi bir class yapısı bulunmadığı için kod "pure pascal" olacak. bi de şu float (bizde single ) pointer'ı byte alana refere ettiğimde oluşan pointer hatalarını halledebilirsem 9kb hedefliyorum
çalışalım arkadaşlar...
bi de aklıma şöyle bir fikir geldi, 4-5 kb feda edilip, bi decompressor eklenerek data dosyalarını(vector,texture.dat) sıkıştırarak overall en küçük size'ı elde etmeye çalışabilir miyiz?
Su anda sadece kod kisminin ufalmasina odaklansak daha iyi olur. Bu kod 9k'ya cekilebilmesi lazim.
Delphi compilerinin daha ufak sonuc vermesinin sebebi, Delphi compilerinin C compileri kadar esnek olmamasindan kaynakliyor. Mesela Fortran en kati kurallara sahip dillerden biri. Bunun icin maksimum optimizasyonu sagliyacak kurallari programciya "zorlatabiliyor". Sonuc: Fortran, array minipulasyonlarinda C'den ortalama %40 daha hizli (Elfe Fortranda devam etme gibi bir niyetim var )
Iste esnekliginde belli bir bedeli var Ama C'de amac minimum kod olusturma olarak kullanilirsa (kod yazarken), "teoride" en iyi sonucu C compileri ile elde edebilmek gerek.
C kodu icin, koda mudahale etmeden daha fazla ufaltmak mumkun degil gibi gorunuyor.
Bir ara vakit bulunca, WinMain'i ortadan kaldirip, CRTMain ile basliyacagim. Es is yapan fonksiyonlari ayni library'den sececegim (bunun buyuk bir rahatlama getireceginden eminim) ve fonksiyonlari runtime'da import edecegim. Bakalim bu nasil sonuc verecek. Ama butun bunlar kodun degismesi anlamina geliyor.
Bu arada, direkt kernel'a jump yapmamaya ozen gosterin!. Kernel icindeki offsetler hemen hemen her windows surumunde farkli. Bazen farkli build'lerde bile farkli olabiliyor. Ne yazik ki bunu DASM'da incelemek zor.
Simdiki oyunlar 1 dvd olarak piyasaya cikiyor. Internet hizi desen min. 256 kbit oldu artik. 40K lik oyun, 9K ya inse ne olacak, boyunuzda 10 cm artis mi olacak.
Kayıt: Mar 13, 2003 Mesajlar: 188 Nereden: İstanbul
Tarih: Tue Nov 29, 2005 5:55 pm Mesaj konusu:
ebleda demiş ki:
Delphi compilerinin daha ufak sonuc vermesinin sebebi, Delphi compilerinin C compileri kadar esnek olmamasindan kaynakliyor. Mesela Fortran en kati kurallara sahip dillerden biri. Bunun icin maksimum optimizasyonu sagliyacak kurallari programciya "zorlatabiliyor". Sonuc: Fortran, array minipulasyonlarinda C'den ortalama %40 daha hizli (Elfe Fortranda devam etme gibi bir niyetim var )
aynen katılıyorum, ancak borland'da kafayı buna takmış bir grup manyak olduğuna emin olduğum için de delphi'nin kendi kalıbına göre oldukça optimize çıktılar ürettiğini düşünüyorum.
esneklik konusu da şöyle, mesela
Kod:
if !RegisterClass(wc) ...
gibi bir ifade delphide pek mümkün değil, illa boolean kıyas gerekiyor, ya da dönen sonuca *her zaman* güven olmuyor.
yani benimki derleyici "destek"li optimizasyon
9k'ya düşünce görüşmek dileğiyle...
yukarıdaki çağrımı yineliyorum, farklı diller bekliyoruz...
Kayıt: Nov 02, 2002 Mesajlar: 215 Nereden: Istanbool
Tarih: Tue Nov 29, 2005 6:22 pm Mesaj konusu:
urettikleri executeable size'larina gore karsilastirirsak, protel hepsine basar, cunku temel birimi byte degil bit. 'type lucifertype array[0 to 7] of bool" diye birsey tanimlarsan 7 byte tutar normalde, protel'de 7 bit tutuyor. hatta, "type mytype2 array[0 to 10] of lucifertype" diye birsey tanimlarsak o da 70 bit tutuyor. bi integer tutacaksin mesela, "bu integer'in alacagi deger maksimum 1000 olacaktir" dersen o integer icin 10 bit ayiriyor... bu intlerden 6 tane lazimsa , array[0 to 5] , esittir 60 bit ~= 8 byte.
Zaten built-in type diye birsey de yok protel'de. sana 32 bit'lik int lazimsa "type my_int 0 to 4,123,321,431 diye bir type tanimlaman gerekiyor.
neyse... demek istedigim su idi aslinda.. o compiler kucuk yapar bu compiler buyuk yapar falan... sonucta, "black cat, white cat... the cat who catches the mice is the good cat."
Tabii yukardaki laf demo mantigina biraz aykiri gelebilir. O zaman da soyle derim, "white cat, black cat, the cat who publishes its demo is the good cat."
8 den aşağı direkt asm ye çevirip derlemeden inmesinin çok zor olduğunu düşünüyorum ancak :
evet ebleda nın daha küçük yapmasını çekemeyerek işi sulandırdım, 4.608byte :http://rapidshare.de/files/8347464/Release.zip.html
tabii "saylanmaz" diyenler olabilir, haklılıkları vardır.
diğer yolladığımın çalıştığı ve XP yüklü sistemlerde performansı (çokaz) düşmüş de olsa çalışması gerekiyor...
Kayıt: Mar 13, 2003 Mesajlar: 188 Nereden: İstanbul
Tarih: Wed Nov 30, 2005 12:06 am Mesaj konusu:
evet gecenin finali benden galiba: 15k=14848 byte.
neler yaptım:
dynamic belleğe geçtim[~5kb], windows apilerinin tamamını tek dosyaya toparladım[~500byte], bolca constant'ın yerine 3,5 vs vs yazdım[~80byte]. ve çalışan (çalışması gereken) bir 14848 byte elde etmiş oldum.
@stroma:
calismiyor ve mnd.dll icinde CDXPacker var onla felan mi paketlemeyi denedin?
pardon yaw söylemeyi unutmuşum. dll haline getirmiştim o sınıfı. halihazırdaydı, onunla denedim. zaten büyük bi numarası da yok. sıkışmış haldeki asıl exe yi(diğer dll) program içinde açıyor(açılan yer temp klasörü olduğu için sanırım asıl sorun) maksat küçük bir "exe" olsun heheh
aslında çok dosya kullanan bir uygulama olduğu için yaptığım çok da saylanmaz bir olay değil aslında
bir tek bende çalışıyor sanırım, ilginç..
aslında bu kod da biraz küçültülebilir belki ama zaten boş uygulamada bile 4 den aşağı -en azından direkt olarak- indirmiyor derleyici.
VS 2005 beta2 kullanıyorum, bazı çalıişmama sorunları bundan kaynaklanıyor(ilk 10 kb likteki tekrar yükleyin hatası, manifest falan: .net ile dll hell den kurtarma girişimi yüzünden heralde galuba..). adres hatası verenlerin sorununu anlayabilmiş değilim. sanırım paketi expand ederken sorun var. ancak exe düzgün çıkartılıyor bende ve çalışıyor, ilk kez local temp klasörü ile iş yapıyorum orda yanlış bişey yapmış olabilirim..
he sıkışmış binary yi exe içine gömmeyi denemedim değil ama o zaman da 10kb oldu boyut. bi işe yaramadı yani heheh
tabii çalışmadıktan sonra kb önemli değil o ayrı. ben biraz gırgırına yaptım. sanırım böyle bakınca levent in 15k lığı öne çıkıyor, gökyüzündeki değişikliği saymazsak hatası yok
Bu forumda yeni konular açamazsınız Bu forumdaki mesajlara cevap veremezsiniz Bu forumdaki mesajlarınızı değiştiremezsiniz Bu forumdaki mesajlarınızı silemezsiniz Bu forumdaki anketlerde oy kullanamazsınız