من رفتم سربازی اگر محتوای منو دوست داشتید و بدردتون خورد از من حمایت مالی کنید

آموزش سی شارپ – مباحث منطقی

آموزش سی شارپ - مباحث منطقی
آموزش سی شارپ - مباحث منطقی

آموزش سی شارپ – مباحث منطقی

یکی از مباحث مهم زبان‌های برنامه نویسی بحث‌های منطقی آن‌ها هستند که باید حتما به آن‌ها توجه ویژه‌ای شود. در این جلسه با آموزش برنامه‌نویسی سی شارپ قصد بررسی برخی از مباحث منطقی در زبان سی شارپ را داریم.

 

حتما قبل از بررسی مباحث منطقی در سی شارپ نوشته‌ی مطالب قبلی این دوره‌ی آموزشی را با هشتگ #دوره آموزشی_سی_شارپ در سایت ما را مطالعه کنید.

آموزش سی شارپ مباحث منطقی

هنگامی‌که یک متغیر تعریف می‌کنید، دقیقاً چه اتفاقی می‌افتد؟

هنگامی‌که یک متغیر تعریف می‌کنید، قسمتی از حافظه‌ی RAM برای این منظور اختصاص داده می‌شود. این قسمت از حافظه، شامل سه چیز است:

  • نام متغیر.
  • data type متغیر.
  • مقدار متغیر.

با توجه به data type، متغیر شما در قسمت‌های متفاوتی ذخیره می‌شود. دو نوع تخصیص حافظه وجود دارد که یکی stack memory و دیگری heap memory است. برای اینکه بهتر با stack و heap آشنا شوید به کد زیر و شرح آن توجه کنید:

public void Method1()
{
int x = 2;
int y = 5;
MyClass ob = new MyClass();
}

در خط اول، کامپایلر مقدار کمی از حافظه stack برای این منظور اختصاص می‌دهد. stack مسئول پیگیری حافظه‌ی مورد نیاز (در حال اجرا) در برنامه شما است. هنگامی که line 2 اجرا می‌شود، متغیر y در بالای stack ذخیره خواهد شد. در خط ۳، متغیر ob در stack ذخیره می‌شود و شیءای که ساخته شده در heap قرار می‌گیرد. referenceها در stack ذخیره می‌شوند و عبارت MyClass ob حافظه را برای یک شیء از این کلاس اشغال نمی‌کند. این عبارت تنها متغیر ob را در stack قرار می‌دهد (و به آن مقدار null می‌دهد) و هنگامی‌که کلمه‌ی کلیدی new اجرا می‌شود. شیء این کلاس در heap ذخیره خواهد شد. هنگامی‌که برنامه به انتهای متد می‌رسد، متغیرهایی که در stack بودند همگی پاک می‌شوند. اما چیزی از heap پاک نمی‌شود بلکه اشیای درون heap بعداً توسط garbage collector پاک خواهند شد.

 

چرا از stack و heap استفاده می‌شود؟

data type‌های اصلی (value types)، پیچیده و سنگین نیستند. آن‌ها مقادیر تکی مثل int i = 5 را نگه می‌دارند در حالی‌که object data types یا reference types پیچیده‌تر و سنگین‌تر هستند. آن‌ها به اشیای دیگری رجوع می‌کنند. به عبارت دیگر، آن‌ها به چندین مقدار رجوع می‌کنند (زیرا اشیاء می‌توانند شامل مقادیر زیادی از فیلد و متد و… شوند). هرکدام از آن‌ها باید در حافظه ذخیره شود. اشیاء به dynamic memory و data type‌های اصلی (value types) به static memory نیاز دارند. اگر برای اطلاعات شما نیاز dynamic memory شود، در heap ذخیره می‌شود. اگر نیاز به static memory شود، در stack ذخیره خواهد شد.

 

بررسی Value types و Reference types

type ها تمام و کمال در stack ذخیره می‌شوند، یعنی هم مقدار و هم متغیر همگی یک‌جا هستند. اما در reference type متغیر در stack است درحالی‌که object در heap قرار می‌گیرد و متغیر و شیء به هم متصل می‌شوند (متغیر به شیء اشاره می‌کند). هنگامی‌که یک شیء می‌سازید و reference آن را با یک reference دیگر مساوی قرار می‌دهید. آن‌گاه هر دوی این referenceها به یک شیء رجوع می‌کنند. تغییر هر کدام از آن‌ها باعث تغییر شیء می‌شود زیرا هردو reference به یک شیء اشاره می‌کنند.

 

مبحث Boxing and Unboxing

وقتی‌که یک مقدار value type را تبدیل به reference type می‌کنید، در واقع اطلاعات را از stack به heap می‌برید. هنگامی‌که یک مقدار reference type را تبدیل به value type می‌کنید، اطلاعات را از heap به stack می‌برید. این رفت و برگشت اطلاعات از stack به heap روی performance (کارایی، سرعت اجرا) برنامه تاثیر می‌گذارد. فرستادن اطلاعات از stack به heap در اصطلاح boxing و فرستادن اطلاعات از heap به stack در اصطلاح unboxing نامیده می‌شود.

نکته: استفاده از boxing و unboxing باعث افت performance می‌شود بنابراین تا آن‌جا که می‌توانید از انجام این‌کار پرهیز کنید. فقط در مواردی که واقعاً نیازمند این‌کار هستید و راه دیگری نیست، از آن استفاده کنید.

 

Garbage Collection چیست؟

Garbage Collection نوعی مدیریت حافظه‌ی خودکار محسوب می‌شود. هربار که یک شیء می‌سازید، object شما در heap ذخیره می‌شود. تا زمانی‌که فضای کافی برای ذخیره‌ی این اشیاء دارید می‌توانید شیء جدید بسازید اما همان‌طور که می‌دانید حافظه نامحدود نیست و ممکن است پر شود. بنابراین باید object‌های بی ‌استفاده، از حافظه پاک شوند تا بتوان مجدداً اشیای دیگری را در حافظه ذخیره کرد. زبان سی‌شارپ برای این منظور از راه حلی به اسم Garbage Collection استفاده می‌کند. Garbage Collection بدون برنامه‌نویس کار خاصی انجام دهد به‌صورت خودکار، اشیایی که در heap قرار دارند. به هیچ referenceای وصل نیستند را پاک می‌کنند. اگر می‌خواهید قبل از پاک شدن یک شیء توسط garbage collector کار خاصی را انجام دهید. فقط از پاک شدن آن مطلع شوید از destructors استفاده می‌کنید.

برای استفاده از تمامی جلسات از هشتگ #دوره آموزشی_سی_شارپ در سایت ما استفاده کنید.

منتظر جلسه‌ی بعدی دوره آموزشی سی شارپ بمانید.

برای امتیاز به این نوشته کلیک کنید!
[کل: 0 میانگین: 0]