האם זה נמצא ב HEAP או ב STACK - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

האם זה נמצא ב HEAP או ב STACK


aviv00

Recommended Posts

שפה - c#


object bb = new object();
bb = 1;

Console.WriteLine(bb.GetType());
Console.WriteLine(bb.GetType().IsByRef);
Console.WriteLine(bb.GetType().IsValueType);

output:
system.int32
false
true

השאלה האם bb נמצא ב STACK או HEAP

אחיי אומר שזה נמצא ב HEAP

אבל GETTYPE נותן משהו אחר ?

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

תקן בבקשה את הקוד שלך (שים אותו בצורה מסודרת בתג קוד).

חוץ מזה, ציין בכותרת באיזו שפה את כותב.

הוספתי את שפת תכנות

אגב עשיתי

bb = 1L

וזה שינה אותו ל LONG אז זה בטח ב HEAP אם זה משתנה למרות שלא השתמשתי ב new

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

STACK אי אפשר לשנות בריצה

HEAP אפשר

לכן אם אתה שינוי TYPE אז הוא חייב להיות ב HEAP זה מה שאני חושב

אם תעשה

int i

i = 1L

תקבל שגיאה כי אי אפשר לשנות את ה TYPE אחרי שהגדרת אותו ב STACK

ב HEAP אפשר.... ? או שאני טועה

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

אה.....

מה?

אין שום הגיון במה שכתבת.

הסיבה שאפשר לעשות דבר כזה:

Object x = new Object();
x = 1L;

היא כי x הוא מטיפוס Object שיכול להצביע לכל דבר, כולל int ו-long. אין פה שום קשר ל-stack/heap.

אם תנסה לשים ערך long בתוך int אז זה לא יתקמפל כי לא ניתן להמיר long ל-int בלי המרה מפורשת. מצד שני, אם תנסה לשים ערך int בתוך long אז זה יעבוד בלי שום בעיה.

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

אז רגע אתה מתכוון שאם אני עושה OBJECT ומכניס משתנה פרמיטיבי הוא יהיה ב STACK זאת אומרת למקום אחר ב STACK

ואם אחרת הוא יקשר אותו ל HEAP ?


פרמיטיבי

stack[object] to stack[int]

לא פרמיטיבי

stack[object] to heap[list]

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

ארכיון

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

×
  • צור חדש...