עבור לתוכן
View in the app

A better way to browse. Learn more.

HWzone

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Featured Replies

פורסם

שלום,

יש לי קורס ב-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.

פורסם

תריץ את התוכנית שלך בRELEASE, ואז לא יכנסו כל מיני רווחים.

שים לב, שאתה יכול להוסיף גם את המילה pragma pack(1) ואז לא יתווספו לך רווחים שנוצרים כתוצאה מיישור.

ארכיון

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

דיונים חדשים

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.