بهینه سازی از مهمترین وظایف یک کامپایلر است که معمول بعد از تولید کد میانی آغاز می شود. همیشه هنگام کامپایل یک برنامه برای پخش نهایی از بهینه سازی استفاده می سود. هرچند گاهی اوقات بهینه سازی مانع اصلی بعضی اهداف است و باید کنار گذاشته کردن یک کد بهینه شده دشوارتر و شاید غیرممکن شود چرا که debug شود. به عنوان مثال به منظور بهینه سازی بسیاری از کدها حین کامپایل ممکن است جابجا شده باشند یا اصل option ساختار آنها عوض شده باشد. به همین دلیل بسیاری از کامپایلرها اجازه نمیدهند کردن و بهینه سازی همزمان فعال شوند. همچنین گاهی کد کامپایل debug های مربوط به یکسان ولی خصوصیات (instruction) شده قرار است روی پردازندههایی با دستورالعملهای مختلف از حیث زمان بندی، سرعت دسترسی به حافظه و ... اجرا شود که در این صورت کامپایلر نباید بهینه سازیهای خاص یک ماشین را روی آن اعمال کند. تکنیکهای مختلف بهینه سازی میتوانند وابسته به زبان منبع، وابسته به ماشین مقصد یا مستقل از هر دو باشند. اغلب روشهای بهینه سازی مستقل از زبان منبع میباشند. همچنین برای بسیاری از الگوریتمهای بهینه سازی وابسته به مقصد، میتوان خصوصیات ماشین مقصد را با یکسری پارامتر معرفی کرد و خود الگوریتم برای مقصدهای مختلف دست نخورده بماند. اهداف کلی یک کیمپایلر هنگام بهینه سازی بصورت خلصه در زیر آمده است که کامپایلر بر اساس نوع بهینه سازی مورد نظرش، به آنها اولویت میدهد: جا میگیرد وپردازنده برای cache کم کردن حجم کد: هرچه حجم کد کمتر باشد راحتتر در دسترسی به آن نیاز به تعداد کمتری مراجعه به حافظه دارد. کم کرد ن محاسبات : تغییر کد به گونهای که محاسبات کمتری داشته باشد وقت پردازنده را کمتر میگیرد. پرهیز از پرشهای شرطی و غیر شرطی : پردازندهها در برخورد باانشعابها و پرشها نمی استفاده کنند و در نتیجه زمان بیشتری در اینگونه مواقع تلف میشود. pipelining توانند از کامپایلر باید کد را به گونهای تغییر دهد که حتی المکان تعداد کمتری انشعاب و پرش داشته باشد. نزدیک کردن ارجاعات مشابه : بخشهایی از کد که یک داده خاص را از حافظه می خوانند بهتر است کنار هم باشند تا دسترسی به داده سریعتر برای آنها انجام گیرد و کامپیوتر مجبور به مراجعه مکرر به حافظه نباشد. ترتیب دهی مناسب دادهها در حافظه : ثباتها باید حاوی دادههای پراستفاده تر باشند. موازی سازی: ترتیب دستورها در حافظه باید به گونهای باشد که به پردازنده حداکثرامکان پردازش موازی دستورات را بدهد.