Tam Sürümünü Görmek İçin : kod optimizasyonu mu derleme optimizasyonu mu?
yesilvadi
17/05/2006, 02:58
merhaba
daha önceleri sadece hafif bir rahatsızlık veren bir konu olan program büyüklükleri ceviz.net in eski girdilerinden birinde masm32 derleyicisi ile karşılaşmamla iyice bir hastalığa dönüştü. masm32 yi kurdum, örnek programlara baktım ki admalar aşmışlar benim 1-2 MB ile yaptığım pencereler butonlar editler içeren programı adamlar 5KB ile yapmış. ee sonuçta arkalarında 32 bir assembly var tabii öyle olacak da benim bu konuda yapabileceğim birşey var mı.
ben kod yazarken mümkün mertebe hızlı küçük esnek vs olsun diye gayret ediyorum ama küçücük bir kütüphane ekleyince boyut tavan yapıyor ki bu herhalde benim yazdığım kodun boyuta çok da fazla etkisi olmadığını gösteriyor( öyle değil mi? )
aslında görsel uygulama geliştirirken en rahat kullanıdğım wxwidgets kütüphanesi ve onun da exe boyutu en az 4MB civarında. delphi programlama araçlarından birinin exe boyutu da böyle büyük oluyormuş başka bir programcıkla boyut küçültülebiliyormuş diye duydum acaba wxwdigtes için de böyle birşey var mıdır
ya da derleme esnasında, kodlama yaparken doğrudan müdahale edebileceğim birşey
bir soru daha c ile yazabildiğiniz en küçük boyutlu program kaç kb civarlarında , kullandığınız derleyiciyi de yazarsanız daha iyi olur sanırım
DEV c++ta proje açtıktan sonra Project optionsa girip parametrs sekmesinden kutuphane çıkarabiliyorsun diye hatırlıyorum.Bi aralar uğraşmıstım.
Wim32 asmye çok da ihtiyacın yok o tür exeler hazırlayabilmek için.Tabi girilen parametreler nasıldı falan onları hatırlamıyorum helpinde yazması lazım.Bulursan hatırlatırsan sevinirim.
Kolay gelsin...
ölçtüğün exe, debug mı, release mi ?
bağladığın kütühaneler debug bilgisi içeriyor mu ?
statik olarak bağladığın kütüphaneler var mı ?
derleyici ayarlarından hız yada exe büyüklüğü optimizasyonu yapabiliyor ama bende bir fark olmadı.
VS 2003 de , win32 application template ( menu, about box )
release = 80 KB
debug = 168 KB
cemaliozan
17/05/2006, 17:30
Uygulama geliştirme araçları eskilerdeki gibi değil. Artık kod ve derleme optimizasyonunu kendileri bir kaç küçük ayarla yapıyorlar. Bir çalıştılabilir dosyanın fiziksel olarak kapladığı alandan çok hafızayı kullanma biçimi çok önemlidir. İllede fiziksel olarak küçük boyutlu çalıştırılabilir dosyalar istiyorsanız 3 ncü parti bir çok araç bunu yapabiliyor. Mesela http://www.aspack.com bağlantısını inceleyin.
Ben kod ve çalıştırılabilir optimizasyonunu tüm tasarım bittikten sonra kontrol ediyorum. Eğer çalıştırılabilirin veya Dinamik bağlantılı kütüphanelerinin (DLL) boyunu küçülteceksem genelde upx algoritmasıyla sıkıştırma yapabilen bu tür yazılımlardan faydalanıyorum. Elimde bir free uygulama var ekten indirebilirsiniz.
Kolay gelsin.
yesilvadi
17/05/2006, 23:12
bildiğim kadarıyla devcpp de vc7deki gibi açıkca debug ve release mod derleme seçeneği yok ben de derleyeici parametreleri ile bunu yapmak istedim (BUILD=release diye) ama başarılı olamadım. doğrusu bugüne kadar hep release modde derleme yaptığını düşündüğüm için pek önemsemiyordum ama sanırım durum gerçekte öyle değil. eğer yanlış biliyorsam ya da yapıyorsam nasıl release mod derleme yapılacağını söyler misiniz.
gcc parametreleri ile optimize yapıp yaklaşık 1MB lik bir kazanç sağladım ama hepsi bu.
bağlayıcı parametrleri birsürü kütüphane ile dolu idi oledb den tutun da opengl, regex vs birsürü şey vardı bunlaraın çoğu gereksizdir diye düşünüp sildiğimde linker error verdi, demek hepsi gerekliymiş diyeceğim ama neden ole opengl gibi şeylere ihtiyaç duyulsun çözemedim pek
exesıkıştır programı ile 2.5MBlik programı 600KB ye kadar sıkıştırabildim ama bu sefer de programın simgesi bozuldu sebebini anlayamadım. peki bu programın sıkıştırma açma işlei sırasında bir yavaşlamaya sebep olması gerekmiyor mu, sanrıım oluyordur da ben farkedemedim küçük proramda ama...
bir de ben uygulamamda debug bilgisi var mı yok u bunu nasıl anlarım, bildiğim kadarıyla release derlemede debug bilgisi olmuyor yoksa başka birşey mi var benim bilmediğim.
bir soru daha: bu masm32 uygulamadaki pencere buton gibi kontrolleri kendisi mi üretiyor yoksa tamamen sisteminkileri mi kullanıyor
cemaliozan
17/05/2006, 23:23
exesıkıştır programı ile 2.5MBlik programı 600KB ye kadar sıkıştırabildim ama bu sefer de programın simgesi bozuldu sebebini anlayamadım.
simgenin bozulmaması gerekiyor, ayrıca sıkıştırma işlemi oldukça güvenli yapılıyor. Simgenin bozulması işletim sistemiyle ilgili bir sıkıntıdan olabilir. Ben yaklaşık 3 yıldır kullanıyorum. Hız problemine gelince test etmemkle birlikte böyle bir şey söz konusu değil. Bu program bir çalıştırılabilirin içindeki gereksizleri ortadan kaldırıyor (Açıklama satırları gibi) Hiç hız problemi yaşamadım.
devcpp de bu seçeneğin olması lazım, biraz araştırmanı öneririm.
proje opsiyonlarında filan ..
debug bilgisi derlemeden önce ayrılır, preprocessor #ifdef __DEBUG (ya da onun gibi birşey), kaynak kodda bırakır yada ayırır.
bunu da derleme opsiyonu olarak release ya da debug seçmiş olmana göre yapar.
( yani derlenmiş birşeyden debug bilgisi çıkartma diye birşey yok )
bir kütüphane debug olarak derlenmişse ve sen bu kütüphaneyi statik olarak bağlıyorsan exe nin boyutu artacakdır.
IDE ler kütüphanelerin debug ya da realease versiyonları nasıl ayırıyorlar, ben de merak ettim , makinada lib* olarak arattım,
mingw nin lib/debug diye ayrı bir klasörü var.
( fakat debug ve release kütüphanelerin adları aynı :( )
*.lib olarak arattım VisualStudio nun kullandığı kütüphanelerin 2 versiyonu var, VS bunlardan uygun olanını bağlıyor.
d ile bitenler debug bilgisi içeriyor.
libc.lib , libcd.lib
oledb.lib , oledbd.lib vs...
Merhaba;
Bu konu çok zaman benimde ilgimi çekmişti.
Bir çok kaynaktan edindiğim bilgide şöyle diyor C orta seviyeli dildir. C ile hazırlanmış kodun derlenmiş boyutu ASM ile hazırlanmış derlenmiş boyutu ile yarışacak kadar buyutu düşük çıkar diye.
Yesilvadi arkadamışım bahsini ettiği olay derlenmiş dosyamızın boyutu ile ASM ile yazılmış derlenmiş dosya boyutu arasındaki fark C ile derleğimiz dosya içerisne nelerin konulduğu gibi bir durum bu benide düşündürüyor derleyiciler dosyamıza neler ekliyor?
Elde edilen dosya boyutun taşınabilirlik olmasından öte bu önemli, yoksa 3. parti araçların yapmış oldukları farklı şeydir. Aynı amaca hitap eden Winzip Winrar v.b. gibi araçlarıda kullanabilirz.
Biraz bilgi amaçlı değinmek isterim:
Uzun zaman Program Türkçeleştirme ve Cracking çalışmalarım oldu hatta bir Cracking grubuylada ortak çalışmalarım oldu bir çok başarılı çalışmalar çıkarttık.
UPX iki yönlü yani hem pack/compress hemde unpack/decompress yapabilen iyi bir araçdır Aspack ve Asprotect yalnız tek yönlü yani compress edebilen araçlardır.
Bu araçlar ile sıkıştırılmış dosyalar dosya boyutları bir hayli azaltılabilmektedir ancak dosyada hiç bir kayıp olmamaktadır örneğin bir exe dosyayı UPX ile önce sıkştırın sonrada açın her şey yerli yerinde olduğunu tekrar aynı boyuta geldiğini göreceksiniz. Bu araçların yaptığı sıkıtırılmış dosyayı winzip benzeri ancak bir farkla diske değil RAM'e açılmasını sağlamak 600Kbyte lik bir sıkıştırılmış dosya RAM'e açıldığında orjinal boyutu örneğin 3 MB ise RAM'de 3MB lik alan kaplayacak kadar açılacakdır.
Böyle dosyaların başlığında header da bu dosyanın RAM'e nasıl açılması gerektiğini sağlayan script bulunur önce bu RAM'e yüklenir sonrada dosyanın geri kalanı Bu script aracılığı ile Byte Byte olması gerektiği OFFSET adresine açılır. Bu Programın RAM'e yüklenmesinde geçen süre kadar bir yavaşlığa neden olsada çalıştığı sürece programın orjinal hızında bir yavşlamaya neden olmamaktadır.
Böylesi sıkıştırılmış programları debug etmek için ya unpack'ini bulurduk açardık ve Olly10 ile debug ederdik yada bulamazsak SofIce kullanırdık.
Tabi bu yöntemler artık eski şimdi programlar böyle korunmuyor.
Sonuç olarak böyle araçlar ile optimizasyon sağlanamaz derleyici dosyamıza gene include edeceğini eder sıkıştırldığında hiç bir optimizasyon sağlanmış olmaz önemsizde olsa üstelik RAM e yükleme süresi gibi biri bir ek yük biner.
Ancak Kod optimizasyonu ile ilgili öneri ve düşüncelerinizin takibindeyim...
Selamlar...
Forum Yazılımı : vBulletin v3.6.8, Copyright ©2000-2008, Jelsoft Enterprises Ltd.