נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: שאלה מאתגרת בC

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
רוני
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 25 July 2007 בשעה 07:47 | IP רשוּם
ציטוט רוני

אני צריך להקצות זכרון חדש כך שהכתובת תשאיר שארית 0 בחילוק ב 16.

עליי להשתמש בפונקציות malloc ו free , תוך כדי מימוש שתי פונקציות:

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

השנייה תקבל את הכתובת הראשונה של הבתים שיש לשחרר.

אשמח לעזרה!

תודה

חזרה לתחילת העמוד הצג את כרטיס החבר של רוני חפש הודעות אחרות של רוני בקר בדף הבית של רוני
 
אלצ'קו
אחראי פורומים
אחראי פורומים
סמל אישי
ג2ר פ33תי

הצטרף / הצטרפה: 20 January 2006
משתמש: מנותק/ת
הודעות: 609
נשלח בתאריך: 25 July 2007 בשעה 08:51 | IP רשוּם
ציטוט אלצ'קו

אני לא בטוח שזה אפשרי ב-C נטו.
חזרה לתחילת העמוד הצג את כרטיס החבר של אלצ'קו חפש הודעות אחרות של אלצ'קו
 
turj
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 25 July 2007 בשעה 09:16 | IP רשוּם
ציטוט turj

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

הצטרף / הצטרפה: 12 January 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 3296
נשלח בתאריך: 25 July 2007 בשעה 09:44 | IP רשוּם
ציטוט ניר

נתונים שיעזרו לפתור את הבעיה:
  1. מצביע הוא משתנה השומר כתובת - אפשר להסתכל על הכתובת כאל מספר.
  2. כאשר מקצים משתנה מסוג char, מוגדר בשפת C שהוא יתפוס תא אחד בודד (בניגוד לכל סוג אחר של משתנה ש-C מציינת למשל ש-int<long אך לא מתחייבת על הגודל של int ושל long).
בעזרת המידע הזה - אפשר לראות כמה בתים צריכים להקצות ולבצע זאת


__________________
מספר האייסיקיו שלי ו/או כתובת ה-MSN שלי אינם מהווים מוקד תמיכה
חזרה לתחילת העמוד הצג את כרטיס החבר של ניר חפש הודעות אחרות של ניר בקר בדף הבית של ניר
 
אלצ'קו
אחראי פורומים
אחראי פורומים
סמל אישי
ג2ר פ33תי

הצטרף / הצטרפה: 20 January 2006
משתמש: מנותק/ת
הודעות: 609
נשלח בתאריך: 25 July 2007 בשעה 09:57 | IP רשוּם
ציטוט אלצ'קו

ניר כתב:
נתונים שיעזרו לפתור את הבעיה:
  1. מצביע הוא משתנה השומר כתובת - אפשר להסתכל על הכתובת כאל מספר.
  2. כאשר מקצים משתנה מסוג char, מוגדר בשפת C שהוא יתפוס תא אחד בודד (בניגוד לכל סוג אחר של משתנה ש-C מציינת למשל ש-int<long אך לא מתחייבת על הגודל של int ושל long).
בעזרת המידע הזה - אפשר לראות כמה בתים צריכים להקצות ולבצע זאת


אם אתה מתכוון שאפשר להקצות זיכרון מ"תחילת האזור הפנוי ב-heap" ועד לכתובת שהיא ‎0 mod 16, להקצות את הזיכרון הרצוי, ואז לשחרר את הבלוק ההתחלתי, זה לא חייב לפעול לפי התקן, ואני יכול לתת מספר תרחישים שבהם זה לא יפעל:
  • בין שתי ההקצאות מתבצע context switch בו מקצים זיכרון, וכך אתה מפספס את ההזדמנות שלך לתפוס כתובת שהיא ‎0 mod 16.
  • המהדר שלך מייצר קוד שמקצה קצת יותר זיכרון ממה שאתה מבקש עבור metadata, ולא מאפשר לך לתפוס את המקום הזה (אתה מבקש 5 בתים מ-B עד F ומקווה להקצות מ-10 והלאה, אבל בעצם הקצית 7 בתים מ-B עד 11, כששני הבתים האחרון מסמנים את סוף האזור המוקצה והשד יודע מה).
  • הפלטפורמה שלך מכריחה אותך להקצות זיכרון בבלוקים שמתחילים בכתובות שהן ‎0 mod 24 ובכפולות של 32. בחיים לא תגיע כאן ל-‎0 mod 16.
חזרה לתחילת העמוד הצג את כרטיס החבר של אלצ'קו חפש הודעות אחרות של אלצ'קו
 

אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

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