אופטימיזציות ב-C

white shadow 3

New member
אופטימיזציות ב-C

הי, בוקר טוב.
כתבתי איזשהיא תוכנית שעובדת ומבצעת את מה שדרוש ממנה.
מתוך התעניינות -
האם ישנה אפשרות ב-C (ב-VISUAL 2010) לראות (כמו שרואים שגיאות קומפילציה וWARNING), איזה אופטימיזציות הקומפיילר ממליץ/ביצע בקוד שלי?

תודה וחג שמח!
 

BravoMan

Active member
הקומפיילר לא "ממליץ".

האופטימיזציות שהקומפיילר מבצע הן ברמת assembly לא ברמת שפת C.
והן תלויות בדגלי קומפילציה שסיפקת.
&nbsp
למשל, אם אתה מקמפל בתצורת Debug, שהיא ברירת מחדל של VS, הקומפיילר לא יבצע שום אופטימיזציות (עד כמה שאני זוכר, אולי MS שינו את זה בגרסאות חדשות יותר).
&nbsp
אני יודע שעבור gcc, יש דגל שיכול לבקש מהקומפיילר לבצע קומפילציה בלבד - תרגום C לאסמבלי, שזה השלב השני בבניית תוכנה ב-C.
אז, אתה יכול להשוות תרגום עם אופטימיזציות ובלי, ולראות מה הקומפיילר עשה.
&nbsp
אגב, מה שהרבה פעמים מכנים "קומפילציה", עבור שפת C למעשה כוללת 4 שלבים:
1. Preprocessor שמתרגם את כל ה-define וה-include ושאר הדברים עם # לקוד C ממש. (בד"כ עושה copy / paste)
&nbsp
2. קומפילציה - זה השלב המסובך ביותר של להפוך קוד C, לאוסף פקודות מכונה בייצוג אסמבלי. זה השלב בו לקומפיילר יש "שיקול דעת" וההחלטה כיצד לתרגם משפט מסוים ב-C יכולה להשפיע על יעילות.
&nbsp
למשל, קומפיילר יכול לבחור "לפרוס" לולאה - כלומר ליצור ממש חזרות בקוד במקום קפיצות למקום אחר בקוד, מה שיתבצע בצורה יעילה יותר על המעבד.
&nbsp
3. אסמבלי (הרכבה) כאן התוצר של שלב 2 הופך ממש לקוד מכונה עבור מעבד ספציפי ונארז בקובץ בפורמט ספציפי (obj במקרה של VS).
&nbsp
4. קישור (linkage) כאן, המקשר linker מחבר את הקוד שלך לכל שאר הדברים שהוא צריך כדי לרוץ, למשל לספרייה הסטנדרטית של C שכוללת דברים כמו printf שהתוכנה שלך משתמשת בהם.
&nbsp
רק לאחר כל 4 שלבים נוצר קובץ התוכנה הסופי, למשל EXE.
 
למעלה