tr-demoscene

the scene => coding => pc => Konuyu başlatan: horselogy - 17.04.2009 01:14:10

Başlık: kod çıktısı büyük değil mi?
Gönderen: horselogy - 17.04.2009 01:14:10
cpp ile hello world programı yazıp derledim. (gnu gcc ile) çıktı 9kb oldu. Büyük değil mi bu çıktı?
Başlık: kod çıktısı büyük değil mi?
Gönderen: coze - 17.04.2009 06:57:35
eee ... normal.
Başlık: kod çıktısı büyük değil mi?
Gönderen: horselogy - 17.04.2009 10:53:15
#include dediğim zaman bütün stdio yu kodun içerisine gömüyor da o yüzden mi bu kadar büyük ? yoksa başka bir sebepten mi?
Başlık: kod çıktısı büyük değil mi?
Gönderen: coze - 17.04.2009 11:42:37
butun stdio'yu kodun icerisine gomdugunden emin degilim ama kullanidigin isletim sistemine ozgu header'lar vs giriyor isin icine.

http://en.wikipedia.org/wiki/Executable_and_Linkable_Format
Başlık: kod çıktısı büyük değil mi?
Gönderen: skate - 17.04.2009 12:30:59
Sanırım yanlış kategoride tartışıyorsunuz arkadaşlar. C=++ Commodore 64 için Nightlord'un geliştirdiği bir compiler. şu anda dönen muhabbet sanki genel bir C++ derleme muhabbeti gibi geldi bana. Yanılıyor muyum? Eğer C=++ (aka: CEPP) ile ilgili değilse bu yazılanlar, topici taşıyacağım.
Başlık: kod çıktısı büyük değil mi?
Gönderen: Decipher - 17.04.2009 12:47:03
C++ ile 9kb hello world kucuk bile (CRT included).
Başlık: kod çıktısı büyük değil mi?
Gönderen: horselogy - 17.04.2009 18:03:16
kategoridei = işaretini farketmemişim C++ sandım :)
Başlık: kod çıktısı büyük değil mi?
Gönderen: horselogy - 17.04.2009 18:10:14
hmm low level değince beklentim fazla oldu heralde benim :) madem normal sorun yok o zaman
Başlık: kod çıktısı büyük değil mi?
Gönderen: skate - 18.04.2009 00:59:42
daha önce bu mesajı yazıp, sonra C=++ altında olduğunu görünce yanlış anladığımı sanıp silmiştim. meğer doğru anlamışım, söz konusu olan C++ imiş :)
 
EXE boyutu küçültme yöntemleri
 
1) Kullanacağın librarylerin headerlarını include etme, onun yerine header dosyalarından yalnızca gerekli kısımları kopyala. Kolay iş değildir ancak iyi bir size optimizasyonudur.
2) Mecbur değilsen C++ yerine Ansi C standartlarına bağlı kal. Özellikle C++ kütüphaneleri yerine standart C libraryleri kullanman faydalı olacaktır. (iostream yerine stdio gibi)
3) EXE kullanmak zorunda değilsin. COM dosyaları erişebileceğin en küçük boyutlu dosyalardır, headerları yoktur v.s. EXE2COM türü utilityler var, EXE'lerine yer kaplayan headerlarını uçuruyorlar. Bunları kullanarak 256 byte'a bile sığdırabilirsin kodunu.
 
Örnekler:
1) 7D3'de Gökhan San'ın hazırladığı fractal zoomer 512 byte'ın altındaydı ve C compilerı ile derlenmişti. Sanırım bir biçimde 7D3 releaseleri arasında yok, eklenmemiş. Ancak sonuçlarda on the fly'da mandel olarak geçiyor.
2) Adını hatırlamadığım basit bir 256b ürün yayınlanmıştı. Ürün çok basit birşey olmasının yanı sıra ürünü hazırlayan coder özelliğinin C derleyicisi kullanarak yapılmış olması olduğunu anlatmıştı. Elbette ki o da EXE2COM benzeri birşeyler kullanmıştı ancak asıl optimizasyonları derleyici tarafunda yaptığını anlatıyordu.
 
Gelelim 9k'lık sonuca. Bence de çok normal. C/C++ dilleri siz optimizasyon yaparlar, hem de zaman zaman oldukça iyi becerirler bunu. Ama kütüphanelerin kapladığı alanlar işin minimumu gibi birşeydir. Yukarıda saydığım tür özel yöntemler kullanmadıkça kütüphaneler 300 KB kaplasa bunu minimum saymak lazım. Ama kod çok çok uzasa da bu size 300 KB mertebesinde kalabilir. Kısacası bu noktada size optimizasyonları devreye giriyor.
 
Son bir dip not olarak şunu da belirtmek lazım. Hello world örneği için geçerli olmasa da daha uzun looplar içeren bir kod söz konusu olduğunda "boyut" açısından derleyici ayarları çok önem kazanır. Optimizasyon genellikle birbirine ters düşen iki kriter üzerinden yapılır. Boyut ve hız. Boyut optimizasyonu küçük bir exe ortaya çıkarırken exe daha yavaş çalışacaktır. Hız ise daha büyük bir exe ortaya çıkarsa da hız olarak olabilecek en ideal sonuçlardan biri ortaya çıkacaktır. Bu konuda önemli olan son bir nokta ise derleyicilerin çoğuna yön verilebilir ama tam anlamıyla hükmedilemez. Örnek olarak milyarlarca kez tekrar eden bir loop olduğu durumda hıza göre optimize kod üret dendiğinde derleyici açık bir loop şeklinde GB'lık bir exe oluşturmayacaktır. Yani derleyiciler aldıkları parametrelerin yanında kendi kurallarına göre son kararı vermektedirler. Bu zaman zaman "her iki durumda da aynı exeyi üretti. neden ki?" sorularına sebep olabildiği için belirtmek istedim.
Başlık: kod çıktısı büyük değil mi?
Gönderen: anesthetic - 18.04.2009 13:12:29
Bahsettiğin C ile yazılan 256b bu sanırım: C is Possible / Wamma (http://pouet.net/prod.php?which=27020)
Başlık: kod çıktısı büyük değil mi?
Gönderen: skate - 18.04.2009 13:32:30
Aaaa, Anes hortladı. Naber kardeşim? :) Evet oydu bahsettiğim. ısmi de açıklıyor olayı zaten.