مدیریت مموری در پایتون


درک مدیریت حافظه برای یک توسعه دهنده نرم افزار مهم است. با استفاده گسترده از پایتون در سراسر توسعه نرم افزار ، نوشتن کد پایتون کارآمد غالباً به معنای نوشتن کدهای کارآمد حافظه است. با افزایش استفاده از داده های بزرگ، نمی توان از اهمیت مدیریت حافظه غافل شد. مدیریت ناکارآمد حافظه منجر به کندی در برنامه و اجزای سمت سرور می شود. نشت حافظه غالباً به زمان بی رویه ای برای تست و دیباگ منجر می شود. همچنین می تواند باعث ایجاد مشکلات همزمان پردازش شود.

حتی اگر بیشتر مدیریت حافظه پایتون توسط Python Memory Manager انجام می شود، درک بهترین شیوه های کدگذاری و نحوه کارکرد Memory Manager در پایتون می تواند منجر به کد کارآمدتر و قابل نگهداری شود.

مهمترین قسمت مدیریت حافظه برای یک توسعه دهنده نرم افزار ، تخصیص حافظه است. درک فرآیندی که فضای خالی در حافظه فیزیکی یا مجازی رایانه اختصاص می دهد بسیار مهم است. تخصیص حافظه دو نوع است.

تخصیص حافظه به صورت ایستا(Static Memory Allocation):

برنامه به حافظه در زمان کامپایل اختصاص داده می شود. به مثال زیر توجه کنید ، شما آرایه ها یا متغیر های استاتیک را فقط با اندازه های ثابت اعلام می کنید. حافظه در زمان کاموایل اختصاص می یابد. پشته برای اجرای تخصیص ساکن استفاده می شود. در این حالت ، نمی توان دوباره از حافظه استفاده کرد.

;static int a=10



تخصیص حافظه به صورت پویا(Dynamic Memory Allocation):

برنامه در زمان اجرا به حافظه اختصاص داده می شود. به مثال زیر توجه کنید ، شما آرایه ها را با عملگر unary new اعلام می کنید. حافظه در زمان اجرا اختصاص می یابد. Heap برای اجرای تخصیص پویا استفاده می شود. در این حالت می توان حافظه را آزاد و مجدداً استفاده کرد در صورت عدم نیاز.

int *p;
p=new int;



خوبی پایتون این است که همه چیز در پایتون یک شی است. این بدان معنی است که تخصیص حافظه پویا زیربنای مدیریت حافظه پایتون است. وقتی دیگر نیازی به اشیا نباشد ، مدیر حافظه Python به طور خودکار حافظه را از آنها بازیابی می کند.

پایتون یک زبان برنامه نویسی سطح بالا است که در زبان برنامه نویسی C پیاده سازی می شود. Python memory manager تخصیص های حافظه پایتون را مدیریت می کند. یک پشته خصوصی وجود دارد که شامل تمام اشیا پایتون و ساختارهای داده پایتون است. مدیر حافظه پایتون انبوه پایتون را بر اساس تقاضا مدیریت می کند. مدیر حافظه پایتون دارای تخصیص دهنده های خاص شی برای اختصاص دادن حافظه به طور مشخص برای اشیا خاص مانند int ، string و غیره است ... در زیر آن ، تخصیص دهنده حافظه خام با مدیر حافظه سیستم عامل در تعامل است تا اطمینان حاصل شود که فضای خصوصی وجود دارد.

مدیر حافظه پایتون تکه های حافظه را به نام "Block" مدیریت می کند. مجموعه ای از بلوک های همان اندازه "استخر(pools)" را تشکیل می دهد. استخرها در Arenas ایجاد می شوند ، بخشهایی از حافظه 256 کیلوبایت بر روی heap = 64 pools اختصاص یافته است. اگر اشیا از بین بروند ، مدیر حافظه این فضا را با شی جدیدی به همان اندازه پر می کند.

متدها و متغیرها در Stack memory ایجاد می شوند. هر زمان متدها و متغیرها ایجاد می شوند ، یک stack frame ایجاد می شود. هر زمان که روش ها بازگردند این فریم ها به طور خودکار از بین می روند.

اشیا و متغیرهای نمونه در حافظه Heap ایجاد می شوند. به محض بازگشت متغیرها و توابع ، اجسام مرده زباله جمع می شوند.اشیا and و متغیرهای نمونه در حافظه Heap ایجاد می شوند. به محض بازگشت متغیرها و توابع ، از بین میروند.

توجه به این نکته مهم است که مدیر حافظه پایتون لزوماً حافظه را به سیستم عامل رها نمی کند ، در عوض حافظه به مفسر پایتون بازگردانده می شود. پایتون دارای یک تخصیص دهنده اشیا کوچک است که حافظه اختصاص داده شده برای استفاده بیشتر را نگه می دارد. در فرآیندهای طولانی مدت ، ممکن است ذخیره افزایشی حافظه استفاده نشده داشته باشید.