זיכרון חופשי ב- C עם פונקציה חופשית

Free Memory C With Free Function



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

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







צורך להשתמש בפונקציה החופשית ב- C לשחרור זיכרון מערכת:

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



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



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





התחביר הכללי של הפונקציה free () בשפת התכנות C הוא כדלקמן:

בָּטֵלחינם (בָּטֵל*ptr)

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



דוגמאות לשימוש בפונקציה החופשית ב- C:

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

דוגמה מס '1: שימוש בפונקציה החופשית עם calloc ב- C:

קוד C לשימוש בפונקציה free () עם הפונקציה calloc () שותף בתמונה למטה:

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

גרסה מעט שונה של אותו קוד מוצגת גם בתמונה המובאת להלן:

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

דוגמה מס '2: שימוש בפונקציה החופשית עם מאלוק ב- C:

קוד C לשימוש בפונקציה free () עם הפונקציה malloc () שותף בתמונה המצורפת למטה:

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

סיכום:

מאמר זה הדגיש את חשיבות השימוש בפונקציה free () בשפת התכנות C בלינוקס. רוב המשתמשים מאמינים שפונקציות ההקצאה של קובץ stdlib.h חשובות יותר; עם זאת, על ידי מעבר במאמר זה, אתה יכול לראות בבירור כי הפונקציה החופשית () חשובה לא פחות. זה יעזור לך לשחרר את הזיכרון שנרכש באופן דינמי ולוודא שלעולם לא יגמר לך הזיכרון בכל פעם שתנסה לבצע את התוכניות שלך בעתיד.