the_king
مدیرکل انجمن
نه، من حرفی از API سیستم عامل نزدم، تامین کننده اش رو گفتم. اگه میخواستم در مورد API صحبت کنم که می کردم.سلامی مجدد
خیلی ممنون استاد.
خوب من دقیق نمیدونستم منظورتون از اینکه Mutex را سیستم عامل تامین میکنه چیه . هنوز هم دقیق متوجه نمیشم .
اگه منظورتون اینه که از api های سیستم عامل از درون کلاس mutex استفاده میشه ، خوب خیلی از کلاس ها این جوری اند .
اگه توضیحات System Mutexes رو بخونید متوجه میشید که منظورم از تامین شدنش توسط سیستم عامل چیه.
Mutexes
خیلی واضح گفتم می توانید باهاش بین برنامه های مختلف هماهنگی ایجاد کنید. بین برنامه های مختلف رو شما چطور تفسیر کردید نمیدونم.
پس؟ از روی چی همچین نتیجه ای گرفتید؟ نه. ویژوال استدیو همون لحظه ای که کد رو می نویسید بخشی از عملیات کامپایل رو شروع کرده. وقتی شما در حال ویرایش یک فرم یک کلاس کنترل تون رو روی فرم قرار می دهید دگمه Start رو زدید؟ نه. ولی کد داخل کلاس در حال اجرا است. قبلا کامپایل شده که میتونه اجرا بشه.الان ، پس کمپایلر ، زمانی شروع به کار میکنه که دکمه ی start در ویژال استودیو را بزنیم . درسته؟
بله.در این زمان ، اول کمپایلر ، زبان سی شارپی که نوشتیم را به زبان clr ترجمه میکنه و زمان اجرا ، clr ، زبان خودش را به زبان پردازنده که همون زبان ماشین هست ، تبدیل میکنه . درسته؟
اون کاری که ویژوال استدیو برای IntelliSense اش انجام میده، همه مراحل کامپایل نیست، اما بخشی از مراحل کامپایل ئه. حتی موقع Rebuild که تمامی مراحل از نو انجام میشن هم منافاتی با کارکرد Debugger و IntelliSense نداره. ممکنه کد توسط فرمان command line بیرون از محیط ویژوال استدیو کامپایل بشه یا در یک IDE متفرقه دیگری که امکانات IntelliSense رو نداره کامپایل بشه. لزومی نداره که حتما موقع کامپایل اصلا ویژوال استدیو در حال اجرا باشه. شما چه تناقضی در کامپایل کردن و شناسایی نوع داده var می بینید؟اگه چیزی که گفتم درست باشه ، پس چرا گفتین :
"نوع داده var در زمان کامپایل مشخص میشه، پس اگر سوال نوع داده باشه جواب مشخصه، در زمان compile ئه."
بنابراین ، نوع داده ای var ، در زمانی که ما داریم کد مینویسیم (در ویرایشگر ویژال استودیو) ، مشخص میشه . چون همون زمان ، وقتی موس را روی متغییری که var بکار بردیم براش ، میبریم ، نوع داده ای اش را مشخص میکنه .
اما اگه چیزی که گفتم درست نباشه ، من باز دقیق منظورتون از تعریف کمپایلر را متوجه نشدم .
اون stack که میگه چیه؟ شما اگر خودتون یک کلاس یا ساختار به نام stack نسازید موردی با این نام در #C و NET. هست؟ وقتی همچین چیزی نیست که بخواهبد ازش شیء بسازید چطور وظیفه GC باشه که حالا حافظه داخلش رو هم آزاد کنه؟منظورش پشته ای است که در هنگام اجرای هر برنامه ای ایجاد میشه، نه System.Collections.Stack. کاری با اشیاء ای که شما در کدتون میسازید و حافظه شون نداره، در مورد پشته به معنی کلی اش حرف میزنه.بله . کار شماره ی "ج" را انجام میده .
ولی شماره ی "الف" را هم انجام میده دیگه . آزاد کردن و اختصاص دادن حافظه ، همه دست GC هست . چه توی استک یا هیپ و ... . خودتون هم قبلا گفته بودین .
من هم هیچ حرفی در مورد ارتباط GC با استک و هیپ نزدم.