פורסם 2008 בדצמבר 1816 שנים אהלןכאשר קוראים לפונקציה למשל ב C אזי יש מחסנית קריאות (מתורדם לאסמבלי) שנשמרים הפרמטרים משתנים גלובלים וכולה.לדוגמא אם יש לי את התוכנית הבאהint x=1int y=2int z=3int res=myfunc(x,y,z)print("end")int myfunc(x,y,z){ int m =x+y+z return m{אני רוצה להבין איך מחסנית הקריאות נבניתאיך המצביעים מייליםואיך בסופו של דבר המחסנית מנוקיית מכל הריצה שנעשת לאחר הפונקציהאיך נכנסים בו המצביעיםebp, espמה תפקידםמה שחשוב לי הוא איך מתנהלת המחסנית לפני הקריאה לפונקציה, במהלכה וכאשר חוזרים להמשך הקודאשמח אם מישהו יתן הסבר מפורטוכן יתן מקדום שבו אוכל ללמוד את זה יותר לעומקתודה
פורסם 2008 בדצמבר 1816 שנים http://en.wikipedia.org/wiki/X86_calling_conventionshttp://en.wikipedia.org/wiki/Call_stackhttp://en.wikipedia.org/wiki/Calling_convention
פורסם 2008 בדצמבר 1916 שנים מחבר קודם כל תודה על הלינקיםיש לי שאלה כעתהבנתי מה התהליך המתרחש במחניתאבל יש לי שאלה ספציפית לגבי התוכנית שכתבתי לעיל (בהודעה ראשונה)הגדרתי שלושה משתנים x,y,zברגע ההגדרה היכן הם נשמרים? על המחסנית?ואיך זה נשמר? איך אני יודע לפי המחסנית ש x=1 ו y=2 ו z=3?הרי בתא במחסנית נשמר ערך יחיד (כנראה 1,2,3)איך שאני רואה את זה המשתנים x,y,z הם משתנים לוקאליים, בא נאמר של תוכנית הראשית?וגם איך נשמרים משתנים גלובליים שנמצאים מעל התוכנית הראשית?אשמח עם מישהו יספק לי תשובות
פורסם 2008 בדצמבר 1916 שנים קודם כל תשים את הקוד בתוך תגית code כדי שנוכל לקרוא אותו, דבר שני זה לא קוד ב C, כי לא ברור באיזה סקופ כל הקוד הראשון נמצא (התכוונת שזה MAIN ?)
פורסם 2008 בדצמבר 1916 שנים משתנים שמוגדרים לוקאלית אכן נשמרים על המחסנית. כשאתה מצהיר על משתנה, אז נוצר מקום במחסנית למשתנה הזה (תכל'ס זה אומר שהמצביע למחסנית קטן בכגודל המשתנה, שבמקרה הזה זה 4, שהוא גודל של int). אם אתה מגדיר שלושה משתנים, אז נוצר מקום לשלושה משתנים במחסנית, והתוכנה "זוכרת" באיזה מקום במחסנית נמצא כל אחד מהמשתנים (לאחר הקומפילציה, השמות של המשתנים כבר חסרי משמעות, והמקומות שלהם במחסנית זה מה שחשוב).משתנים גלובאליים נשמרים בבלוק זכרון חיצוני של התכנית, ולא במחסנית.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.