"כיווץ" זיכרון בהרצת תוכנית C - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

"כיווץ" זיכרון בהרצת תוכנית C


sxs

Recommended Posts

שלום,

יש לי קורס ב-C באוניברסיטה. המרצה סיפר לנו היום שכאשר אני מגדיר למשל 3 מערכים:

int a[10];
int b[10];
int c[10];

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

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

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

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

האם זה תוכנה חיצונית שעושה את זה?

האם זו פונקציה ב-C שמאלצת סוג כתיבה כזה לזיכרון?

האם זו אופציה בקומפיילר או בויז'ואל סי שאפשר להגדיר?

תודה מראש :)

קישור לתוכן
שתף באתרים אחרים

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

int *a = (int*)malloc(100*sizeof(int));
int *b = (int*)malloc(100*sizeof(int));
int *c = (int*)malloc(100*sizeof(int));

אז הם באמת לא היו יושבים ברצף.

מה שהבודק עושה זה כנראה להריץ תוכנה שבודקת דליפות/דריכות , כגון Purify.

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...