עבור לתוכן

בעיה במימוש של aligned_realloc בשפת סי

Featured Replies

פורסם

שלום לכולם, התבקשתי לממש את שלוש הפונק' הבאות :

 void *aligned_malloc(size_t size, size_t alignment);
void aligned_free(void *ptr);
void *aligned_realloc(void *ptr, size_t size);

עליי להשתמש בפונק' malloc, realloc, sizeof ו free בלבד כאשר הפרמטר alignment חייב להיות חזקה של 2.

מימשתי את שלושתן ובמשוב שקיבלתי נאמר לי כי בפונק' aligned_realloc אני לא משמר את הבאפר המקורי שהוקצה במקור.

צירפתי קובץ עם המימוש (ניסיתי להשתמש ב# אבל משום מה זה יוצא מאוד לא מסודר)

אני אודה אם תוכלו להסביר היכן הבעיה.

פורסם

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

הבעיה היא שה-realloc שאתה משתמש בה לא יכולה להבטיח לשמר את ה-alignment.

פורסם
  • מחבר

אז אולי פשוט אני יכול לשמור את הפרמטר alignment בזיכרון שאני מקצה aligned_malloc.. ואז אני אוכל להעזר בו בפונק' alignment_realloc

פורסם
  • מחבר

לפי מה שהבנתי , aligned_malloc מקצה גודל בלוק בכתובת שהיא כפולה של הפרמטר alignment ובגלל שאני לא מקבל את הפרמטר הזה בaligned_realloc חשבתי לשמור אותו כחלק מהזיכרון המוקצה..

פורסם
  • מחבר

אפשר לקבל כיוון איך לשמר את ה alignment בפונק' aligned_realloc ?

פורסם

אתה יכול לעשות את זה בדיוק כמו ששמרת את המצביע שהוקצה ע"י malloc.

פורסם
  • מחבר

תודה רבה

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים