تفاوت کلیدی – تخصیص حافظه استاتیک در مقابل دینامیک
در برنامه نویسی، ذخیره داده های محاسباتی ضروری است. این داده ها در حافظه ذخیره می شوند. مکان های حافظه برای ذخیره داده ها در برنامه نویسی کامپیوتری به عنوان متغیر شناخته می شود. متغیرها دارای یک نوع داده خاص هستند. بنابراین، حافظه برای اجرای برنامه ها اختصاص داده می شود. حافظه به دو صورت قابل تخصیص است. آنها تخصیص حافظه استاتیک و تخصیص حافظه پویا هستند. در تخصیص حافظه ایستا، پس از تخصیص حافظه، نمی توان آن را تغییر داد. حافظه قابل استفاده مجدد نیست. اما در تخصیص حافظه پویا، پس از تخصیص حافظه، می توان آن را تغییر داد.تفاوت اصلی بین تخصیص حافظه استاتیک و پویا در این است که در تخصیص حافظه استاتیک پس از تخصیص حافظه، اندازه حافظه ثابت است در حالی که در تخصیص حافظه پویا، پس از تخصیص حافظه، می توان اندازه حافظه را تغییر داد.
تخصیص حافظه استاتیک چیست؟
در تخصیص حافظه ثابت، حافظه تخصیص یافته ثابت است. پس از تخصیص حافظه، نمی توان آن را تغییر داد. حافظه را نمی توان کم یا زیاد کرد. به عنوان مثال، در زبان C اگر برنامه نویس int x را بنویسد، به این معنی که متغیر می تواند یک مقدار صحیح را ذخیره کند. تعداد بایت ها به کامپیوتر بستگی دارد. آرایه ها نیز می تواند وجود داشته باشد. به عنوان مثال. int x [5]; این x آرایه ای است که می تواند دنباله ای از داده ها را از یک نوع ذخیره کند. این می تواند پنج عنصر عدد صحیح را ذخیره کند. نمی تواند بیش از پنج عنصر را ذخیره کند. در جاوا، یک آرایه می تواند به صورت, int arr=new int[5] ایجاد شود. آرایه "arr" می تواند 5 مقدار صحیح را ذخیره کند و نمی تواند بیشتر از آن را ذخیره کند.
شکل 01: روشهای تخصیص حافظه
در تخصیص حافظه ایستا، زمانی که متغیرها تخصیص یافتند، دائمی می مانند. پس از تخصیص اولیه، برنامه نویس نمی تواند اندازه حافظه را تغییر دهد. اگر برنامه نویس آرایه ای را اختصاص دهد که بتواند 10 عنصر را ذخیره کند، امکان ذخیره مقادیر بیشتر از مقدار مشخص شده وجود ندارد. اگر برنامهنویس در ابتدا آرایهای را اختصاص داد که میتواند 10 عنصر را در خود جای دهد، اما فقط به 5 عنصر نیاز داشت، در این صورت حافظه هدر میرود. آن حافظه دیگر مورد نیاز نیست، اما امکان استفاده مجدد از حافظه نیز وجود ندارد.تخصیص حافظه استاتیک ثابت است اما پیاده سازی آن ساده و آسان است و همچنین سریع است.
تخصیص حافظه پویا چیست؟
گاهی اوقات لازم است اندازه حافظه را تغییر دهید. بنابراین حافظه را می توان به صورت پویا تخصیص داد. بسته به درج و حذف عناصر داده، حافظه می تواند رشد کند یا کوچک شود. به عنوان تخصیص حافظه پویا شناخته می شود.
در زبان C، فایل هدر stdlib.h، چهار تابع برای تخصیص حافظه پویا وجود دارد. آنها calloc، malloc، realloc و رایگان هستند. تابع malloc() اندازه مورد نیاز بایت ها را اختصاص می دهد و یک اشاره گر خالی را برمی گرداند و اولین بایت حافظه اختصاص داده شده را نشان می دهد. تابع calloc() اندازه مورد نیاز بایت ها را اختصاص می دهد و آنها را صفر می کند. سپس یک نشانگر خالی را به حافظه برمی گرداند. تابع free() برای تخصیص مجدد حافظه اختصاص داده شده استفاده می شود. و تابع realloc می تواند حافظه اختصاص داده شده قبلی را تغییر دهد. پس از تخصیص حافظه با استفاده از calloc یا malloc، اندازه حافظه ثابت می شود، اما می توان با استفاده از تابع realloc آنها را افزایش یا کاهش داد.در جاوا، مجموعه ها می توانند برای تخصیص حافظه پویا استفاده شوند.
مزیت اصلی تخصیص حافظه پویا این است که باعث صرفه جویی در حافظه می شود. برنامه نویس می تواند حافظه را در صورت لزوم اختصاص دهد یا حافظه را آزاد کند. حافظه را می توان در حین اجرا دوباره تخصیص داد و در مواقعی که نیازی به آن نیست، می تواند حافظه را آزاد کند. تخصیص حافظه پویا نیز نسبت به تخصیص حافظه استاتیک کارآمد است. یکی از معایب این است که اجرای تخصیص حافظه پویا پیچیده است.
شباهتهای بین تخصیص حافظه استاتیک و دینامیک چیست؟
- هر دو مکانیسم تخصیص حافظه هستند.
- هر دو باید توسط برنامه نویس به صورت دستی پیاده سازی شوند.
تفاوت بین تخصیص حافظه استاتیک و دینامیک چیست؟
تخصیص حافظه استاتیک در مقابل تخصیص حافظه پویا |
|
تخصیص حافظه ایستا روشی برای تخصیص حافظه است و پس از تخصیص حافظه، ثابت می شود. | تخصیص حافظه پویا روشی برای تخصیص حافظه است و پس از تخصیص حافظه، می توان آن را تغییر داد. |
تغییر | |
در تخصیص حافظه ثابت، پس از تخصیص اولیه امکان تغییر اندازه وجود ندارد. | در تخصیص حافظه پویا، حافظه را می توان بر این اساس به حداقل رساند یا حداکثر کرد. |
اجرای | |
تخصیص حافظه استاتیک به راحتی قابل پیاده سازی است. | تخصیص حافظه پویا برای پیاده سازی پیچیده است. |
سرعت | |
در حافظه استاتیک، اجرای تخصیص سریعتر از تخصیص حافظه پویا است. | در حافظه پویا، اجرای تخصیص کندتر از تخصیص حافظه استاتیک است. |
استفاده از حافظه | |
در تخصیص حافظه ثابت، نمی توان از حافظه استفاده نشده دوباره استفاده کرد. | تخصیص حافظه پویا امکان استفاده مجدد از حافظه را فراهم می کند. برنامه نویس می تواند در صورت نیاز حافظه بیشتری را اختصاص دهد. او می تواند در صورت لزوم حافظه را آزاد کند. |
خلاصه – تخصیص حافظه استاتیک در مقابل تخصیص حافظه پویا
در برنامه نویسی، تخصیص حافظه استاتیک و تخصیص حافظه پویا دو مکانیزم برای تخصیص حافظه هستند. تفاوت بین تخصیص حافظه استاتیک و پویا در این است که در تخصیص حافظه استاتیک پس از تخصیص حافظه، اندازه حافظه ثابت است در حالی که در تخصیص حافظه پویا، پس از تخصیص حافظه، می توان اندازه حافظه را تغییر داد. برنامه نویس می تواند بسته به کاربرد، تصمیم بگیرد که آیا حافظه باید ثابت باشد یا پویا.
دانلود PDF تخصیص حافظه استاتیک در مقابل دینامیک
می توانید نسخه PDF این مقاله را دانلود کنید و طبق یادداشت نقل قول برای اهداف آفلاین از آن استفاده کنید. لطفاً نسخه PDF را از اینجا دانلود کنید: تفاوت بین تخصیص حافظه استاتیک و دینامیک