עבור לתוכן

קריאה לפונקציה ומחסנית הקריאות

Featured Replies

פורסם

אהלן

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

לדוגמא אם יש לי את התוכנית הבאה

int x=1

int y=2

int z=3

int res=myfunc(x,y,z)

print("end")

int myfunc(x,y,z){

int m =x+y+z

return m

{

אני רוצה להבין איך מחסנית הקריאות נבנית

איך המצביעים מיילים

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

איך נכנסים בו המצביעים

ebp, esp

מה תפקידם

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

אשמח אם מישהו יתן הסבר מפורט

וכן יתן מקדום שבו אוכל ללמוד את זה יותר לעומק

תודה

פורסם
  • מחבר

קודם כל תודה על הלינקים

יש לי שאלה כעת

הבנתי מה התהליך המתרחש במחנית

אבל יש לי שאלה ספציפית לגבי התוכנית שכתבתי לעיל (בהודעה ראשונה)

הגדרתי שלושה משתנים x,y,z

ברגע ההגדרה

היכן הם נשמרים? על המחסנית?

ואיך זה נשמר? איך אני יודע לפי המחסנית ש x=1 ו y=2 ו z=3?

הרי בתא במחסנית נשמר ערך יחיד (כנראה 1,2,3)

איך שאני רואה את זה המשתנים x,y,z הם משתנים לוקאליים, בא נאמר של תוכנית הראשית?

וגם איך נשמרים משתנים גלובליים שנמצאים מעל התוכנית הראשית?

אשמח עם מישהו יספק לי תשובות

פורסם

קודם כל תשים את הקוד בתוך תגית code כדי שנוכל לקרוא אותו, דבר שני זה לא קוד ב C, כי לא ברור באיזה סקופ כל הקוד הראשון נמצא (התכוונת שזה MAIN ?)

פורסם

משתנים שמוגדרים לוקאלית אכן נשמרים על המחסנית. כשאתה מצהיר על משתנה, אז נוצר מקום במחסנית למשתנה הזה (תכל'ס זה אומר שהמצביע למחסנית קטן בכגודל המשתנה, שבמקרה הזה זה 4, שהוא גודל של int). אם אתה מגדיר שלושה משתנים, אז נוצר מקום לשלושה משתנים במחסנית, והתוכנה "זוכרת" באיזה מקום במחסנית נמצא כל אחד מהמשתנים (לאחר הקומפילציה, השמות של המשתנים כבר חסרי משמעות, והמקומות שלהם במחסנית זה מה שחשוב).

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

ארכיון

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

דיונים חדשים