PDA

View Full Version : مبتدی: بدست آوردن آدرس حافظه یک متغیر



majid2230
دوشنبه 24 آبان 1389, 12:01 عصر
سلام
من یه کلاس به صورت زیر دارم


class Test
{
public string X1;
public int[] X2;
}

من یه متغیرازنوع این کلاس تعریف کرده ، اون رو New کردم حالا چه جوری میشه فهمید آدرس متغیر تعریف شده کجای حافظه است.

میلاد قاضی پور
دوشنبه 24 آبان 1389, 15:24 عصر
کلاس رو نمیدونم (به گمونم متغیر ها دونه دونه نه به صورت کلاس در حافظه قرار میگیرند) اما برای کار روی آدرسهای حافظه در مورد اشاره گرها مطالعه کنید(pointers) در همون تعاریف اولیه جواب سوألتون رو میگیرید.




int x=10;
int* X1=&x;

به این صورت آدرس متغیر ایکس در ایکس یک ذخیره میشه

FastCode
دوشنبه 24 آبان 1389, 16:18 عصر
کلاس رو نمیدونم (به گمونم متغیر ها دونه دونه نه به صورت کلاس در حافظه قرار میگیرند) اما برای کار روی آدرسهای حافظه در مورد اشاره گرها مطالعه کنید(pointers) در همون تعاریف اولیه جواب سوألتون رو میگیرید.




int x=10;
int* X1=&x;

به این صورت آدرس متغیر ایکس در ایکس یک ذخیره میشه

گمان نکنید.
مطمئن باشید اشتباه است.

جواب سوال:
http://msdn.microsoft.com/en-us/library/f58wzh21(VS.80).aspx

syntiberium
دوشنبه 24 آبان 1389, 17:58 عصر
سلام . در رابطه با این تاپیک یه سوال داشتم . چطوری می شه با استفاده از آدرس بدست آمده به این آدرس مقدار بدهیم یا از آن مقدار بگیریم ؟
با تشکر .

میلاد قاضی پور
دوشنبه 24 آبان 1389, 18:03 عصر
گمان نکنید.
مطمئن باشید اشتباه است.

جواب سوال:
http://msdn.microsoft.com/en-us/library/f58wzh21(VS.80).aspx (http://msdn.microsoft.com/en-us/library/f58wzh21%28VS.80%29.aspx)

این یعنی میشه کلاسهارو یکجا در حافظه ذخیره کرد و فقط یک آدرس در دست داشت ؟
یا کدم اشتباه بود ؟

FastCode
سه شنبه 25 آبان 1389, 05:44 صبح
این یعنی میشه کلاسهارو یکجا در حافظه ذخیره کرد و فقط یک آدرس در دست داشت ؟
یا کدم اشتباه بود ؟

کلاسها برای این کار بوجود آمده اند که در یک جا باشند.

میلاد قاضی پور
چهارشنبه 26 آبان 1389, 19:48 عصر
کلاسها برای این کار بوجود آمده اند که در یک جا باشند.

نه منظورم اینه که آدرس واحد برای کل یک کلاس وجود نداره شما میگید داره ؟

kamran00f
پنج شنبه 27 آبان 1389, 14:38 عصر
گمان نکنید.
مطمئن باشید اشتباه است.

جواب سوال:
http://msdn.microsoft.com/en-us/library/f58wzh21(VS.80).aspx

این لینک کار با pointer هارو نشون داده ولی جایی توضیح نداده که شیئی که از کلاس point ساخته کلا یه آدرس خاص داره یا نه! فقط آدرس یه int از اون شیء رو استفاده کرده!

FastCode
یک شنبه 30 آبان 1389, 20:29 عصر
این لینک کار با pointer هارو نشون داده ولی جایی توضیح نداده که شیئی که از کلاس point ساخته کلا یه آدرس خاص داره یا نه! فقط آدرس یه int از اون شیء رو استفاده کرده!
یکم راجع به سوالت فکر کن.
اگر دو تا اینتیجر داشته باشیم.
باید یک پوینتر داشته باشیم به اولی و یکی به دومی.
پس چرا کلاس داریم؟Struct برای چیه؟اصلاً تا حالا کلمه primitive type به گوشتون خورده؟

http://www.developerfusion.com/article/84519/mastering-structs-in-c/
برای struct هاست.


چون میدونم سرچ نکردی برات لینک نمیزارم:
An object is completely self-describing. Areference to it is the size of a machine pointer—that is, 32 bits on a 32-bit machine, 64 bits on a 64-bit—that points into the GC heap. The target of the pointer is actually another pointer, which refers to an internal CLR data structure called a method table. The method table facilitates method calls and is also used to obtain an object’s type dynamically. The double word before that (fancy name for 4 bytes, or 32 bits) makes up the so-called sync-block, which is used to store such miscellaneous things as locking, COM interoperability, and hash code caching (among others). After these come the actual values that make up instance state of the object.
The sum of this is that there is roughly a quad word (8-byte, 64-bit) overhead per object. This is, of course, on a 32-bit machine; for 64-bit machines, the size would be slightly larger. The exact number is an implementation detail and can actually grow once you start using certain parts of the runtime. For example, the sync-block points at other internal per-object runtime data structures that can collect dust over time as you use an object.
کامل نیست ولی خوبه.
مثلاً با روش پیاده سازی اینترفیس ها اشاره نکرده.

این یکی دیگه جا نمیشه:
http://bytes.com/topic/net/answers/649329-void-pointer-managed-object-type
به سوال ربطی نداره. ولی بخونش تا بفهمی چطوری میشه با این ساختار کار کرد.

این هم قشنگه:
http://blogs.msdn.com/b/ericlippert/archive/2009/02/17/references-are-not-addresses.aspx
چراهای لینک بالا رو جواب میده.