نحوه برقراری ارتباط اشیای دارای جمع آوری زباله با کد بیرونی
جمع آور زباله در سگمنت داده ایستا ، پشته ها و محتویات رجیستر هر thread ، به دنبال ریشه ها می گردد . اگر تنها ریشه یک شیئ بیرون از آنها باشد ، جمع آور زباله آن را از بین می برد و حافظه را آزاد میسازد .
برای اجتناب از این واقعه باید :
۱. ریشه دسترسی به یک شیئ را در جایی نگهداری کنیم که جمع آور زباله در آن جا به دنبال ریشه می گردد .
۲.به شیئ مجدداً توسط تخصیص دهنده کد خارجی یا کتابخانه های زمان اجرای C یعنی malloc/ free ، حافظه تخصیص دهیم .
اشاره گرها و جمع آور زباله
الگوریتم های جمع آوری زباله بستگی دارد به اشاره گرهایی که به چیزی در حال اشاره اند و غیر اشارهگرها که به چیزی اشاره نمی کرده اند . بدین منظور دستورات زیر که در C غیر معمول نیستند باید به دقت در D از آنها خودداری شود :
۱. اشاره گرها را با xor کردن آنها با مقادیر دیگر مخفی نکنید مانند اشاره گر xor شده حقهی لیست پیوندی در C . از حقهی xor برای جا به جا کردن مقادیر دو اشاره گر استفاده نکنید .
۲. اشاره گرهای به مقادیر صحیح را توسط cast یا دیگر حقه ها ذخیره نکنید ، چون جمع آوری زباله انواع غیر اشارهگر را برای یافتن ریشه های دسترسی بررسی نمی کند .
۳. از مزیت هم ترازی اشاره گرها برای ذخیره فلگهای بیتی در بیتهای سطح پائین یا بیتهای سطح بالا استفاده نکنید .
۴. مقادیر صحیح را در اشاره گرها نگهداری نکنید .
۵. مقادیر جادویی را در اشاره گرها ذخیره نکنید به غیر از null .
۶. اگر شما باید یک مکان نگهداری خاص را بین انواع اشاره گر و غیر اشارهگر به اشتراک بگذارید از union استفاده کنید تا جمع آور زباله تکلیف خودش را در آن مورد بداند .
در حقیقت تا جایی که می شود از اشاره گرها استفاده نکنید . D دارای امکاناتی مانند اشیاء مرجع ، آرایه های پویا و جمع آوری زباله است که نشان می دهد که اغلب اشاره گرهای آشکارا ، متروک و بلااستفاده خواهند بود . اشاره گرها برای ارتباط موفق با API های C و بعضی کارهای کیمیاگرانه در D فراهم شده اند .
ساختمانها و یونیون ها
نحوه اعلان :
- Tag { DeclDefs }
- Tag Identifier { DeclDefs }
- Tag Identifier ;
- Tag: struct / union
شبیه 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<DD DIR="RTL" STYLE="margin-bottom: 0.5cm; text-align: right"> انتساب اولیهی استاتیک یونیون ها
یونیون ها به طور آشکار مقدار دهی اولیه می شوند :
- union U { int a ; double b ; }
- static U u = { b : 5.0 } ; // u.b = 5.0
دیگر اعضای یونیون که انتساب دهنده را جای می گذارند ولی فضای بیشتری اشغال می کنند مقدار صفر می گیرند .
- Enums
- اعلان :
- EnumDeclaration:
- enum identifier { EnumMembers }
- enum { EnumMembers }
- enum identifier ;
Enum کاربرد معمولی ماکروی define# در زبان C را برای تعریف مقادیر ثابت جایگزین میکند.
Enum ها همچنین می توانند بی نام باشند که در آن مورد به سادگی ثابت های مجتمع را تعریف می کنند و یا دارای نام باشند که مقدمه یک نوع جدید خواهند بود . اعلان زیر :
- enum { A, B, C } // anonymous enum
مقادیر ثابت A=0 , B=1 , C=2 که معادل دستورات زیر است را تعریف میکند :
- const int A = 0; const int B = 1; const int C = 2;
در حالی که اعلان زیر:
- enum X { A, B, C } // named enum
نوع جدید 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
سلام بهروز جان
خوشحالم که به وبلاگت میرسی و دائما اپدیتش میکنی
موفق باشی
بای بای
سلام
وبلاگ خوبی دارید.من که خیلی استفاده کردم
راستی شما مطالبی در مورد جاوا به خصوص در بخش وراثت دارید که در اختیار من قرار بدید ممنونم از لطفتون.