מטלה בשפת c

davidfun

New member
מטלה בשפת c

היי חברים/ות,
אשמח את עזרתכם.
קיבלתי מטלה דחופה, ואיני מצליח להבין כיצד לממש אותה.
1. המטלה היא לכתוב תוכנית שתממש ניהול של זכרון מרוחק שמוקצה כבר במחשב, אין גישה למחשב ממנו אני עושה את התוכנית, נדרש ממני אך ורק לנהל את ההקצאות עליו.
מרחב הכתובות הוא 32 גי' של זכרון.
ההקצאות הפיזיות הן 2 מ"ב.
הנדרש: לאתחל את סוף הזכרון ולשחרר את כל המשאבים שהוקצו ולבדוק האם קיים זכרון פיזי.
דגש: לא מדובר בmalloc משום שהזכרון כבר הוקצה, רק צריך לנהל את ההקצאות עליו.
איני מבין על מה המדובר. אודה לכם מאוד על העזרה.

2. התוכנית נדרשת לכתוב בפרוטוקול c99 ולא בc++. מה הכוונה בזה?

תודה רבה.
 

selalerer

New member
עזרה:

2. C99 זה תקן של שפת C. אתה נדרש לכתוב את התוכנית בשפת C כפי שהיא מוגדרת בתקן הזה. זו שפת תכנות ואתה צריך ללמוד אותה אם אתה לא מכיר אותה.
&nbsp
1. לא ברור מה הכוונה ב"זיכרון מרוחק".
בד"כ המטרה בתרגילים האלו זה לגרום לך להבין מה malloc עושה בפנים (אתה למעשה כותב מחדש את הקוד שכתוב לו בפנים + לפעמים דברים שמערכת ההפעלה עושה עבורו).
&nbsp
בגדול אתה יכול לחשוב על זה כאילו יש לך גוש גדול של זיכרון (נגיד מערך של char) בגודל של 32G (שזה המון) ואתה צריך לממש את malloc שנותן למי שקורא לו חתיכות מהגוש (למעשה פשוט מצביע לאיזשהו מקום במערך הזה) וגם כמובן את free שאומר לך שהמשתמש הפסיק להשתמש בחתיכה הזו ואתה יכול להקצות אותה מחדש ב-malloc אם זה נדרש.
&nbsp
אתה צריך איפשהו לרשום לך מה כבר נתת החוצה ומה עדיין נותר "פנוי" מתוך הגוש זיכרון שלך. נהוג שגם את המידע הזה אתה שם על גוש הזיכרון הגדול הזה (במקום שאתה לא נותן החוצה עם malloc אלא שנשאר תמיד "שלך").
&nbsp
לא לגמרי מובן מה הכוונה ב-2MB "הקצאות פיזיות". אולי הכוונה היא שזה גודל הגושים שה-malloc שלך מחזיר.
&nbsp
&nbsp
זה מבלי להבין לחלוטין את התרגיל שלך. נראה שרשמת פה אתה מה שאתה הבנת מהתרגיל ולא את התרגיל המקורי ואתה לא ממש הבנת את התרגיל ככה שיצא קצת בלאגן.
 

davidfun

New member
הבהרה

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

אשמח לדיוק בזה.
 

selalerer

New member
לא כתבתי לך להשתמש ב-malloc.

כתבתי לך ליצור אותו מחדש. my_malloc יכול להיות השם של הפונקציה שלך למשל.

אתה יכול ליצור גוש זיכרון גדול גלובלי ואת ההקצאות לעשות ממנו:
קוד:
#define GLOBAL_MEM_SIZE (1024l*1024l*1024l*32l)
char global_mem[GLOBAL_MEM_SIZE];
ה-C שאתה מכיר זה כנראה ANSI C שזה תקן אחד לשפה שיצא בשנת 89. היו מספר התקדמויות ויצא תקן נוסף בשנת 99 שהוא C99. זו אותה שפה, רק עם כמה תוספות שהופכות את הכתיבה בשפה לנוחה יותר.

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

davidfun

New member
תודה

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