يمكن C#GC نقل كائنات الذاكرة




(3)

بالنظر إلى أنك تستخدم var فهذا يعني أنك تحدده بطريقة ما. يعيش المتغير الخاص بك في سياق هذه الطريقة لفترة قصيرة جدًا ، ومن غير المرجح أن يقوم GC بنقلها.

من ناحية أخرى ، ستحرك GC كتل الذاكرة لتقليل تجزئة الذاكرة ، لذا قد تنقل متغيراتك. أفضل جزء منه أنك لن تلاحظ ذلك لأنه "علامة تبويب" قديمة بنفسك.

إذا كنت تريد التأكد من إصلاح موقع هذا المتغير ، يمكنك استخدام "ثابت".

لنفترض هذا الكود الأساسي C #:

var tab = new int[10];

لقد قرأت أنه يمكن نقل المتغيرات غير الثابتة في الذاكرة بواسطة أداة تجميع مجمعي البيانات المهملة.

سؤالي هو: هل من الممكن تغيير عنوان "علامة التبويب" أثناء تنفيذ البرنامج الخاص بي؟

أنا فقط أريد أن أفهم.

في الواقع ، لا يهم إذا كانت قيمة علامة التبويب تتغير.


من المؤكد أنه يمكن نقل كائن الصفيف في الذاكرة.

لكن لاحظ أنه لا يمكنك الحصول على مؤشر كائن مرجع مُدار ، أو يمكنك استخدام كتلة fixed ، ولا يمكن نقله بواسطة GC داخله.

إذا تم نقل كائن الصفيف ، فسيتم أيضًا تحديد المرجع من tab متغير إلى كائن الصفيف بواسطة GC ، لذا لن تكون هناك طريقة لمعرفة أي شيء يتأثر بـ GC.


نعم.

ولكن يمكنك استخدام الكلمة الأساسية fixed لمنع GC من تحريكها إذا أردت ذلك.




c#  

c#