ההבדל בין חדש למוקוק ()

מְחַבֵּר: Laura McKinney
תאריך הבריאה: 1 אַפּרִיל 2021
תאריך עדכון: 5 מאי 2024
Anonim
ההבדל בין חדש למוקוק () - טכנולוגיה
ההבדל בין חדש למוקוק () - טכנולוגיה

תוֹכֶן


החדש והמאלוק () שניהם משמשים להקצאת דינמי באופן דינמי. אם כי, חדשים ו- malloc () שונים זה מזה בהרבה חסרונות. ההבדל העיקרי בין חדש ל- malloc () הוא זה חדש הוא המפעיל, המשמש כמבנה. מצד שני, malloc () היא פונקצית ספרייה רגילה המשמשת להקצאת זיכרון בזמן ריצה. ההבדלים האחרים ביניהם נדונים להלן בתרשים ההשוואה:

  1. טבלת השוואה
  2. הגדרה
  3. הבדלים עיקריים
  4. סיכום

טבלת השוואה

בסיס להשוואהחדשmalloc ()
שפההמפעיל החדש הוא תכונה ספציפית של C ++, Java ו- C #. הפונקציה malloc () היא תכונה של C.
טבע"חדש" הוא מפעיל.malloc () היא פונקציה.
מידה של( )חדש אינו זקוק למפעיל גודל זה מכיל מספיק זיכרון לסוג ספציפי malloc דורש ממפעיל גודל לדעת מה גודל הזיכרון שיש לו להקצות.
בנאי מפעיל חדש יכול להתקשר לבנאי של חפץ.malloc () לא יכול בכלל להתקשר לבנאי.
אתחולהמפעיל החדש יכול לאתחל אובייקט תוך הקצאת זיכרון אליו.לא ניתן היה לבצע אתחול זיכרון ב- malloc.
עומס יתר ניתן להעמיס על מפעיל חדש.לעולם לא ניתן להעמיס את ה- malloc ().
כישלוןכשכישלון, מפעיל חדש זורק חריג.בעת כישלון, malloc () מחזיר NULL.
מיקום מחדשהקצאת הזיכרון על ידי חדש, ממוקמת מחדש באמצעות "מחק".הקצאת הזיכרון על ידי malloc () ממוקמת מחדש באמצעות פונקציה חופשית ().
הקצאה מחדשהמפעיל החדש אינו מקצה מחדש זיכרון.ניתן להקצות מחדש זיכרון שהוקצה על ידי malloc () באמצעות realloc ().
ביצועהמפעיל חדש מקצץ את זמן הביצוע.ה- malloc () דורש זמן רב יותר לביצוע.


הגדרת חדש

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

type variable_name = סוג חדש (parameter_list);

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

המפעיל החדש מקצה מספיק זיכרון הנדרש לאובייקט מסוג מסוים. מכאן שהוא אינו דורש מפעיל sizeof () וגם אינו מחייב לשנות את גודל הזיכרון כמו malloc () שמשתמש ב- realloc () כדי להקצות מחדש את הזיכרון. המפעיל החדש הוא מבנה; הוא קורא לבנאי של אובייקט תוך הצהרה המשמשת בדרך כלל לאתחול האובייקט.


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

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

הגדרה של malloc ()

ה malloc () היא פונקציה המשמשת להקצאת כמות הזיכרון המבוקשת על הערימה. השיטה מחזירה את המצביע מסוג 'בטל' שהוא עוד יותר, הקלד cast כדי לקבל מצביע לזיכרון מהסוג שצוין ומצביע זה לזיכרון מוקצה למשתנה התייחסות. הפונקציה malloc () דומה למפעיל החדש ב- C ++ כפי שהיא משמשת להקצאת זיכרון באופן דינמי. Malloc () הוא פונקציה ספרייה רגילה. התחביר של הפונקציה malloc () הוא כדלקמן:

type variable_name = (type *) malloc (sizeof (type));

כאן, "סוג" מציין את סוג הנתונים של המשתנה שיש להקצות לו זיכרון. שם המשתנה הוא שם משתנה ההתייחסות אליו יוקצה המצביע שהוחזר על ידי malloc (). הסמל (סוג *) מתאר את סוג הליהוק לקבלת מצביע לזיכרון בסוג ספציפי. הגודל () מתאר את malloc (), מה גודל הזיכרון הנדרש.

ה- malloc () דורש הליהוק מסוג מכיוון שהמצביע שהוחזר על ידי ה- malloc () הוא מסוג חלל, ולכן, כדי להקצות סוג למצביע, יש צורך ביציקת סוג. Sizeof () נדרש מכיוון שהפונקציה malloc () מקצה זיכרון גולמי, ולכן היא נדרשת להגיד לפונקציה malloc () איזה גודל זיכרון צריך להקצות. אם הזכרון שהוקצה אינו מספיק, ניתן לשנות את גודלו או להקצות אותו מחדש באמצעות realloc ().

הפונקציה malloc () מקצה זיכרון על הערימה. במקרה, הערמה אזלה מהזיכרון, הפונקציה malloc () מחזירה מצביע NULL. מכאן שיש לבדוק את משתנה הייחוס המכיל מצביע שהוחזר על ידי malloc () לפני השימוש בו, אחרת הוא עלול לגרום לקריסת מערכת.

הזיכרון שהוקצה על ידי הפונקציה malloc () מחולק באמצעות חינם (). כאשר שיחת פונקציה מובילה לתקורה, malloc () דורש זמן רב יותר לביצוע.

  1. המפעיל החדש הוא מבנה שהוצג ב- C ++ ומשמש ב- Java, C # וכו '. מצד שני malloc () הוא פונקצית ספרייה סטנדרטית שנמצאת רק בשפת C ונתמכת על ידי C ++.
  2. המפעיל החדש מקצה מספיק זיכרון לאובייקט מהסוג שצוין, כך שהוא אינו דורש גודל של מפעיל. מצד שני, פונקציית malloc () מחייבת את מפעיל sizeof () כדי ליידע את הפונקציה איזה גודל זיכרון יש לה להקצות.
  3. המפעיל החדש יכול להתקשר לבנאי של החפץ בזמן ההכרזה. מצד שני, פונקציית malloc () לא יכולה להתקשר לבנאי.
  4. ניתן היה להעמיס על המפעיל 'חדש' אבל malloc () לא יכול היה.
  5. אם המפעיל החדש לא מצליח להקצות את הזיכרון, הוא זורק חריג שצריך לטפל בו באמצעות הקוד אחר שתסיים התוכנית. מצד שני, הפונקציה malloc () מחזירה מצביע NULL אם היא לא מצליחה להקצות זיכרון. אם משתמשים ב מצביע מבלי לבדוק זאת, הוא יביא לקריסת מערכת.
  6. ניתן לחלק את הזיכרון שהוקצה באמצעות מפעיל חדש באמצעות 'מחק'. מצד שני, ניתן לארגן מחדש את הזיכרון שהוקצה באמצעות פונקצית malloc () באמצעות חינם ().
  7. לאחר שהזיכרון מוקצה באמצעות מפעיל חדש, בכל מקרה לא ניתן לשנות את גודלו. מצד שני, ניתן להקצות (לשנות גודל) את הזיכרון שהוקצה באמצעות פונקציית malloc () באמצעות פונקצית realloc ().
  8. זמן הביצוע של חדש הוא פחות בהשוואה ל- malloc () מכיוון שהמלקוק הוא פונקציה וחדש הוא מבנה.

סיכום:

הפונקציה malloc () היא הדרך הישנה להקצות את הזיכרון באופן דינמי. בימינו, המפעיל החדש משמש להקצאת הזיכרון בזמן ריצה מכיוון שיש לו יתרונות מסוימים על פני malloc ().