|
From Shabgard.ORG
Programming
نحوه برقراری ارتباط اشیای دارای جمع آوری زباله با کد بیرونی: جمع آور زباله به دنبال ریشه ها د سگمنت داده ایستا و پشته ها و محتویات رجیستر هر رشتهی اجرا می گردد. اگر تنها ریشه یک شیئی بیرون از آنها باشد ، جمــــع آور زباله آن را از بین می برد و حافظه را آزاد میسازد. برای اجتناب از این واقعه باید: ریشه دسترسی به یک شیئی را در جایی ابقا کنیم که جمع آور زباله در آن جا به دنبال ریشه می گردد . به شیـــئی مجــــــدداً توسط تخصیص دهنده که خارجی یا کتــــابخانه های زمان اجرای C ( malloc/free ) ، حافظه تخصیص دهیم . اشاره گرها و جمع آور زباله الگوریتم های جمع آوری زباله بستگی دارد به اشاره گرهایی که به چیزی در حال اشاره اند و غیر اشارهگرها که به چیزی اشاره نمی کرده اند . بدین منظور دستورات زیر که در C غیر معمول نیستند باید به دقت در D از آنها خودداری شود : ۱) اشاره گرها را با xor کردن آنها با مقادیر دیگر مخفی نکنید مانند اشاره گر xor شده حقهی لیست پیوندی در C . از حقهی xor برای جا به جا کردن مقادیر دو اشاره گر استفاده نکنید . ۲) اشاره گرهای به مقادیر صحیح را توسط cast یا دیگر حقه ها ذخیره نکنید چون جمع آوری زباله انواع غیر اشارهگر را برای یافتن ریشه های دسترسی بررسی نمی کند . ۳) از مزیت هم ترازی اشاره گرها برای ذخیره فلگهای بیتی در بیتهای سطح پائین یا بیتهای سطح بالا استفاده نکنید . ۴) مقادیر صحیح را در اشاره گرها نگهداری نکنید و ۵) مقادیر سحر آمیز را در اشاره گرها ذخیره نکنید به غیر از null . ۶) اگر شما باید یک مکان نگهداری خاص را بین انواع اشاره گر و غیر اشارهگر به اشتراک بگذارید از union استفاده کنید تا جمع آور زباله تکلیف خودش را در آن مورد بداند . در حقیقت تا جایی که می شود از اشاره گرها استفاده نکنید . D دارای خصوصیات است که نشان می دهد که اغلب اشاره گرهای آشکارا ، متروک و بلااستفاده خواهند بود . مانند اشیاء مرجع ، آرایه های پویا و جمع آوری زباله . اشاره گرها برای ارتباط موفق با API های C و بعضی کارهای کیمیاگرانه پدید آمده بودند . ساختمانها و یونیون ها Aggregate Declaration شبیه C کار می کنند با تفاوتهای زیر : ۱) بدون فیلد های بیت ۲) هم ترازی به طور آشکار قابل مشخص کردن است . ۳) بدون فضای نام برچسب جداگانه – نام برچسب ها در حوزه کنونی می باشند . ۴) اعلان هایی مانند struct ABC x ; مجاز نیستند بنویسید : ABC x ; ۵) ساختمانها یا یونیون های بی نام می توانند عضوی از ساختمانها یا یونیون های دیگر باشند . ۶) انتساب دهنده های پیش فرض اولیه برای اعضا پشتیبانی می شود . ۷) توابع عضو و اعضای استاتیک مجاز است . ساختمانها و یونیون ها به معنی اجتماع ساده داده ها یا راهی برای رنگ و آب دادن به یک ساختمان داده می باشد ، علاوه بر سخت افزار یا یک نوع خارجی ، انواع خارجی می توانند توسط API سیستم عامل یا یک فرمت فایل تعریف شوند . خصوصیات شیئی گرا نیز با نوع داده کلاس فراهم شده اند . انتساب اولیه استاتیک ساختمان ها به اعضای ساختمان استاتیک به طور پیش فرض مقدار صفر انتساب داده می شود و به مقادیر ممیز شناور مقدار NAN . اگر یک انتساب دهنده اولیهی استاتیک فراهم شود ، اعضا به وسیله نام عضو ، کولوم و املای عبارت انتساب اولیه می شوند . در ضمن ممکن است اعضا به هر نحو انتساب اولیه شوند . struct X { int a; int b; int c; int d = 7;} static X x = { a:1, b:2}; // c is set to 0, d to 7 static X z = { c:4, b:5, a:2 , d:5}; // z.a = 2, z.b = 5, z.c = 4, d = 5 انتساب اولیهی استاتیک یونیون ها یونیون ها به طور آشکار مقدار دهی اولیه می شوند : union U { int a ; double b ; } static U u = { b : 5.0 } ; // u.b = 5.0 دیگر اعضای یونیون که انتساب دهنده را جای می گذارند ولی فضای بیشتری اشغال می کنند مقدار صفر می گیرند . Enums اعلان Enum enum identifier { اعضا } enum { اعضا } enum identifier ; Enum ها کاربرد معمولی ماکروهای # define را با ثبات های تعریف جایگزین می کنند . Enum ها همچنین می توانند بی نام باشند که در آن مورد به سادگی ثابت های مجتمع را تعیف می کنند و یا دارای نام باشند که مقدمه یک نوع جدید خواهند بود . C = 2 , b=1 , A=0 ثابتهای enum { A,B,C} بدون نام enum را تعریف می کند . در حالی که Enum دارای نام enum X { A,B,C} نوع جدید x با مقادیر X.A = 0 و X.B = 1 و X.C =2 تعریف می کند . Enum ها باید حداقل دارای یک عضو باشند . اگر برای یک عضو Enum یک عبارت ریاضی فراهم شده باشد ارزش عضو مذکور برابر حاصل عبارت است و عضو بعدی Enum دارای ارزش عضو قبلی به علاوه یک است . Enum { A , B = 5 + 7 , C, D = 8 , E } داریم A = 0 , B = 12 , C = 13 , D = 8 , E = 9 صفات Enum کوچکترین عضو min بزرگترین عضو max سایز نگهداری ارزش عضو size مقدار دهی Enum در غیاب یک مقدار دهنده به صورت آشکار ، یک متغیر Enum دارای مقدار اولین عضو است . Enum X { A = 3 , B,C } مقدار X برابر 3 می شود . X x ; حمید نصیبی hamidnsaba@yahoo.com Copyright by Shabgard.ORG |