C לעומת C ++ לעומת C ++ 14 (השוואה בין זמן ריצה)

בזמן התכנות, לפעמים יתקעתם במצב כאילו בחרתם לבצע את השאלה הזו ב- C ו- C ++ או C ++ 14, אז הגורם המכריע מגיע לזמן הריצה והיכולת של התוכנית להסתגל לשינויים ב העתיד . כאן C ++, C ++ 14 הם בעלי קצה מעל C מכיוון שיש לו פונקציות מוגדרות מראש בספרייה הנקראת ספריית תבניות סטנדרטית הידועה בכינויה STL שהיא קבוצה של שיעורי תבנית C ++ המספקים מבני נתונים ותכנות נפוצים של תכנות כמו רשימות, ערימות מערכים וכו '. זוהי ספרייה של שיעורי מכולות, אלגוריתמים ואיטרטורים החוסכת טונות של זמן על ידי מתן מבני נתונים שונים למתכנת בלחיצת כפתור.

ההבדל העיקרי בין C ל- C ++ הוא ש- C היא שפת תכנות פרוצדורלית ואינה תומכת בשיעורים ואובייקטים, בעוד ש C ++ היא שילוב של שפת תכנות פרוצדוראלית ושפת תכנות כאחד; לכן C ++ יכולה להיקרא שפה היברידית.

כעת כשמגיעים לעניין, אולי שמעת ש- C ++ איטי יותר מ- C, אבל האם ראית את הסטטיסטיקות? לאחר ביצוע שינויים קלים בתוכנית אנו יכולים לגרום לתוכנית C ++ לפעול באותו זמן או לפעמים אפילו יותר מהר מתוכנית מקבילה הכתובה ב- C. הנה לקחתי שתי שאלות בנושא חיפוש בינארי ואז קידמתי אותן ב- C ו- C ++ ו- C ++ 14 ואז השוויתי את זמן הריצה שלהם.

אם אתה בדרך כלל משתמש ב- cin / cout ב- C ++, ייתכן שהשינויים הבאים מועילים למדי. פשוט כלול אותו בתחילת התוכנית והשתמש בו בעיקר ואתה טוב ללכת.

תוכלו למצוא מה הוא עושה כאן.

Q1. תעלומת הסבון

זוהי שאלת חיפוש בינארית כללית בה ניתנות שאילתות q ועלינו לחפש בינארית q מספר פעמים על n אלמנטים ומזהה המורכבות שלה O (Q * Log (N)) כאשר N אינו של אלמנטים במערך.

תוכלו למצוא את הפיתרון כאן.

כאשר קידוד זה ומריץ אותו במקרי בדיקה גדולים זה מה שקיבלתי.

זמן ריצה של Q1 באמצעות G ++ 5.4.0

ניתן לראות בבירור ש- C הרבה יותר מהיר מ- C ++ 14, אך העניין שיש לשים לב הוא שכאשר משתמשים בשינוי זה (דחיפה) ניתן לראות בבירור ש- C ++ 14 ו- C ++ מציגים ביצועים טובים יותר ב- C בזמן הביצוע שלהם (במקרה של מקרי בדיקה גדולים).

Q2. החל בפיתוח משחק

זוהי שאלה קלה-בינונית הכרוכה בביצוע חיפושים בינאריים ב- N במערך דו-ממדי עם שורות N ועמודות M ואז מציאת המינימום של התשובה המתקבלת בכל שורה שהיא התשובה הסופית שלנו. המורכבות מתגלה כ- O (Nlog (M)).

ניתן למצוא פיתרון כאן.

עכשיו קידוד זה בשלוש שפות שונות הנה מה שיש לי:

זמן ריצה של Q2 באמצעות G ++ 5.4.0

גם כאן ניתן לראות בבירור ש- C עולה על ביצועים טובים ב- C ++ 14 אך באמצעות שינוי זה C ++ מהיר יותר מ- C.

חלקם אף משתמשים ב- getchar () שלא נעול (אם כי יש לו דליפת אבטחה), המהירה ביותר מבין כל אלה, מכיוון שהיא קוראת וכותבת ישירות באמצעות register שעוקף את הזרמים שביניהם (שימוש רק אם הזמן מהווה דאגה רבה). לפעמים גבולות הזמן בשאלות הם כה קפדניים עד כי שינויים אלה ממלאים כלל מכריע, בלעדיהם הם עשויים לקבל TLE.

המהדר ממלא גם תפקיד מכריע. שניים מהם G ++ 5.4.0 ו- CLANG. קומפיילר הוא תוכנית מחשב (או מערכת תוכניות) ההופכת קוד מקור שנכתב בשפת תכנות (שפת המקור) לשפת מחשב אחרת (שפת היעד), כאשר לעיתים האחרונים יש צורה בינארית המכונה קוד אובייקט. המהדר שיכול לבצע את העבודה הזו מהר יותר יהיה טוב יותר.

אבזרי GCC

1. GCC תומך בשפות שאינן מכוונות אליהם, כגון Java, Ada, FORTRAN, Go וכו '.

2. GCC תומך בהרחבות שפה רבות, חלקן אינן מיושמות על ידי קלנג. לדוגמה, במצב C, GCC תומך בפונקציות מקוננות ויש לו סיומת המאפשרת VLAs במבנים.

אבזרי CLANG

  1. קלנג מהיר בהרבה ומשתמש בהרבה פחות זיכרון מאשר GCC.
  2. התמיכה של Clang ב- C ++ תואמת יותר את התמיכה של GCC במובנים רבים.
  3. Clang תומך בהרחבות שפה רבות, חלקן אינן מיושמות על ידי GCC. לדוגמה, Clang מספק תכונות לבדיקת בטיחות פתיל וסוגי וקטור מורחבים.
  4. Clang תוכנן כבר מההתחלה לספק אבחון ברור ותמציתי במיוחד (הודעות שגיאה ואזהרה) וכולל תמיכה באבחון אקספרסיבי.

אז זה מסיים את הפעילות הקטנה והכי כייפית שלי של השוואה בין זמן הביצוע בין שתי שפות נפוצות ביותר בתכנות מחשבים באמצעות חיפוש בינארי כציר. אני מקווה שרכשת קצת ידע על ידי קריאת זה ותוכל לבחור את שפת התכנות בצורה טובה יותר.

קריאה שמחה !