הבדלים בין הקצאה סטטית לדינאמית - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

הבדלים בין הקצאה סטטית לדינאמית


amit501

Recommended Posts

כשמקצים סטטית איפה נשמר האובייקט וכשדינמית איפה?

מה ההבדל בין הקצאה סטטית לדינמאית בנוגע למחרוזות(מה אפשר לעשות בדינאמית שאי אפשר בסטטית).

ובאובייקטים (מה ההבדל בין הקצאה סטטית למבציע על אוביקט דינאמי(NEW) ).

תודה רבה

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

בכל תוכנית יש לך כמה איזורי (segments): בין השאר - האיזור של ה-( code (TEXT, איזור המידע הסטטי (נדמה לי שקוראים לו DATA אבל אני לא בטוח), איזור המחסנית (stack) ואיזור ה- heap ('ערמה' זה שם מפגר מדי).

אני אניח שאתה מדבר על שפה כמו C++/Pascal ולא על C#, Java כי שם זה קצת שונה (אובייקטים מוגדרים תמיד ב- heap).

אם אתה מגדיר משתנה/אובייקט בתוך פונקציה בהקצאה סטטית: (תצמיד לשמאל כדי לראות את זה נורמאלי)

{

MyClass A;

}

האובייקט נשמר ב- stack.

אם אתה מגדיר משתנה/אובייקט בהקצאה דינאמית:

{

MyClass *A = new A;

}

אז מוגדר לך אובייקט ב- heap, ופוינטר אליו שנמצא ב- stack.

אם אתה מגדיר משתנה סטטי (בתוך פונקציה או מחוץ לה

static MyClass A;

אז המשתנה מוגדר באיזור המידע הסטטי.

עכשיו-

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

מחרוזות הן שונות בכל שפה, וב- C++ יש כמה סוגים. (הפרימטיבי ביותר זה char* של C)

כשאתה מקצה מערך של תוים בהקצאה סטטית אתה חייב לדעת מה האורך של המערך

אי אפשר לכתוב -

int x=GetSize();

char s[x];

אבל כן אפשר לכתוב

char* s=new char[x];

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

נדמה לי שלא.

כל פונקציה שלוקחת char* יכולה לקבל גם מערך סטטי של char, פשוט בגלל שב- C שם של מערך הוא מצביע קבוע לתחילת המערך.

מה שכן, זה פותח אותך ל- buffer overflow attacks ועל זה אתה יכול לקרוא בהרחבה כאן

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

ארכיון

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

×
  • צור חדש...