פורסם 2005 באפריל 120 שנים כשמקצים סטטית איפה נשמר האובייקט וכשדינמית איפה?מה ההבדל בין הקצאה סטטית לדינמאית בנוגע למחרוזות(מה אפשר לעשות בדינאמית שאי אפשר בסטטית).ובאובייקטים (מה ההבדל בין הקצאה סטטית למבציע על אוביקט דינאמי(NEW) ).תודה רבה
פורסם 2005 באפריל 120 שנים בכל תוכנית יש לך כמה איזורי זיכרון (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];
פורסם 2005 באפריל 120 שנים מחבר באמת תודה רבה באשר למחרוזות יש הבדלים בפעולות על מחרזות סטטיות ודינמיות
פורסם 2005 באפריל 120 שנים נדמה לי שלא.כל פונקציה שלוקחת char* יכולה לקבל גם מערך סטטי של char, פשוט בגלל שב- C שם של מערך הוא מצביע קבוע לתחילת המערך.מה שכן, זה פותח אותך ל- buffer overflow attacks ועל זה אתה יכול לקרוא בהרחבה כאן
פורסם 2005 באפריל 320 שנים שים לב שבאמצע התוכנית אתה יכול גם לעשותstrcpy(str, "blabla");כאשר str זה char *.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.