نمایش نتایج 1 تا 6 از 6

نام تاپیک: Optimize کردن حجم فایل اجرایی در کامپایلر

  1. #1

    Optimize کردن حجم فایل اجرایی در کامپایلر

    من دارم روی optimization در کامپایلر های C/C++‎ مطالعه می کنم.
    بیشتر از همه هم از MinGW و Microsoft C/C++‎ Compiler (که همراه VS هست) استفاده می کنم.
    آقای Bjarne Stroustrop توی وب سایتش اشاره کرده که سایز خروجی یک Hello World ساده باید یکسان باشه (البته گفته که این بستگی به کامپایلر داره و خودش از gcc توی یونیکس استفاده کرده)
    حالا من میخوام به حداکثر بهینه سازی در سایز (حداقل سایز فایل خروجی) برسم.
    این نتایج کارمه تا الان:
    C with gcc: 15.5 KB
    C with cl : 47 KB
    C++‎ with g++: 477 KB
    C++‎ with cl : 95.5 KB

    with optimizations:
    C with gcc /Os: 15.2 KB
    C with cl /O1: 47 KB
    C++‎ with g++ /Os: 476 KB
    C++‎ with cl /O1: 92 KB

    کامپایلر های استفاده شده:
    Microsoft C/C++‎ Compiler 15.00
    GCC 3.4.5 (MinGW)

    دوستان اگر راه هایی جهت کاهش بیشتر سایز دارن اینجا بگن (البته راه های کامپایلری ، نه strip و upx و ...)
    من هم نتایج مطالعاتم و جواب ایمیلم (if any!) از ایشون رو اینجا میذارم
    We work in the dark, we do what we can, we give what we have.
    Our doubt is our passion and our passion is our task.
    The rest is the madness of art

  2. #2

    نقل قول: Optimize کردن حجم فایل اجرایی در کامپایلر

    خب ، نتایج کارم تا الان:
    این دو لینک رو بخونید:
    http://msdn.microsoft.com/en-us/magazine/cc301696.aspx
    http://www.phreedom.org/solar/code/tinype
    در ادامه نتایج کارم رو می بینید. (strip و upx رو هم اضافه کردم. سویچ MD کامپایلر مایکروسافت هم خیلی جالب بود ، بهترین نتیجه رو داد. البته با این کار ، نیاز به MSVCRT.dll هنگام اجرای برنامه خواهیم داشت که همین dll loading خودش سربار داره ، ولی خب هدف این پست کمترین سایز خروجیه)
    توجه: سویچ /OPT:NOWIN98 که در مقالۀ بالا بهش اشاره شده ، دیگه تو لینکر مایکروسافت ساپورت نمیشه (اگر هم بخوایم از /ALIGN استفاده کنیم ، باید سویچ /DRIVER رو هم به کار ببریم. (یعنی فقط برای device driver ها می تونیم این کارو بکنیم))
    نتایج کارم :


    C with cl : 47 KB (strip: 46.5 KB, upx -9: 24.5 KB)
    C with cl /Ox /Os : 47 KB
    C with cl /MD : 5.5 KB (strip: 5 KB , upx: 4 KB)
    C with cl /O1 libctiny.lib : 2.5 KB (strip: 2 KB , upx: error)


    C with gcc : 15.4 KB (strip: 5.5 KB , upx -9: 13.4 KB)
    C with gcc -Os : 15.2 KB

    C++‎ with cl : 95.5 KB (strip: 95 KB , upx -9: 45 KB)
    C++‎ with cl /Ox /Os : 92 KB
    C++‎ with cl /MD : 8 KB

    C++‎ with g++ : 477 KB (strip: 270 KB , upx -9: 289 KB)
    C++‎ with g++ -Os : 476 KB

    خب ، اگه کسی لینک های داده شده رو مطالعه کرد و باز هم سوال داشت ، بپرسه.
    در ضمن کسی کامپایلر یا راه بهتری سراغ داره ؟
    We work in the dark, we do what we can, we give what we have.
    Our doubt is our passion and our passion is our task.
    The rest is the madness of art

  3. #3

    نقل قول: Optimize کردن حجم فایل اجرایی در کامپایلر

    همین تست رو (با شرایط یکسان) با Tiny C Compiler انجام دادم ، حجم خروجی 1.5 کیلوبایت ( 1536 بایت) شد
    We work in the dark, we do what we can, we give what we have.
    Our doubt is our passion and our passion is our task.
    The rest is the madness of art

  4. #4

    نقل قول: Optimize کردن حجم فایل اجرایی در کامپایلر

    دو تا کامپایلر رو فراموش کردید:
    LCC
    Pelles C

    برای دستیابی به کمترین حجم ممکن یکی از بهترین گزینه‌ها همون TCC هست که ازش استفاده کردید

    برای دستیابی به کمترین حجم با استفاده از VC می‌تونید از Libctiny استفاده کنید
    پیوند دادن برنامه‌تون به جای کتابخانه‌ی استاندارد با این کتابخانه باعث می‌شه حجم برنامه خیلی کم بشه

    مراحل بعدی Merge کردن بخش‌های فایل اجرایی، کم کردن Alignment، و فشرده‌سازی هست

    فشرده‌سازی بیش از این حد بیشتر برای اهداف رقابتی انجام می‌شه

    برای رسیدن به کمترین حجم ممکن یه فایل اجرایی باید از اسمبلر nasm استفاده کنید
    اگه اشتباه نکنم کوچیک ترین فایل اجرایی که برای ویندوز ساخته شده 133 بایت بود که با همین nasm ایجاد شده بود

  5. #5

    نقل قول: Optimize کردن حجم فایل اجرایی در کامپایلر

    دو تا کامپایلر رو فراموش کردید:
    من به همۀ کامپایلر ها دسترسی ندارم؛ وگرنه Borland C++‎ و Intel C++‎ Compiler و Watcom رو هم باید می آوردم در این مقایسه.
    LCC Win32 رو تست کردم. سایز فایل اجرایی خروجی 47.5 کیلوبایت هست

    (Pelles و Borland رو هم تست می کنم و اینجا می نویسم)
    We work in the dark, we do what we can, we give what we have.
    Our doubt is our passion and our passion is our task.
    The rest is the madness of art

  6. #6

    نقل قول: Optimize کردن حجم فایل اجرایی در کامپایلر

    We work in the dark, we do what we can, we give what we have.
    Our doubt is our passion and our passion is our task.
    The rest is the madness of art

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •