دوره های آموزشی آکادمی پی وی لرن (پروژه محور و ویژه بازار کار)



  • ۲۵
  • اسفند

جلسه ۲۸ : مدیریت حافظه در زبان C

  • دسته‌بندی‌ها :
جلسه ۲۸ : مدیریت حافظه در زبان C
    • جزئیات
    • نوع محتواآموزشی

      مقدمه

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

      مدیریت حافظه در زبان C

      در این قسمت نحوه مدیریت حافظه به صورت پویا توضیح داده می شود.

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

      ردیفتوابع و توضیحات
      ۱void *calloc(int num, int size);فضای حافظه مورد نیاز یک آرایه را به طول num اختصاص می دهد. با مقدار دهی اولیه.
      ۲void free(void *address);این تابع فضای حافظه اختصاص داده شده را آزاد می کند.
      ۳void *malloc(int num);فضای حافظه مورد نیاز یک آرایه را به طول num اختصاص می دهد. بدون مقدار دهی اولیه.
      ۴void *realloc(void *address, int newsize);این تابع فضای اختصاص داده شده رو با اندازه جدید به روز می کند.

      اختصاص حافظه به صورت پویا

      در هنگام برنامه نویسی، اگر از اندازه آرایه آگاهی دارید، تعریف آن را آسان می کند و می توانید آن را به صورت آرایه تعریف کنید.

      برای مثال، برای ذخیره نام هر شخص، می توانید یک آرایه با حداکثر ۱۰۰ کاراکتر تعریف کنید.

      بنابراین شما می توانید چیزی را به صورت زیر تعریف کنید.

      مثال : 

      اما اکنون اجازه دهید وضعیتی را در نظر بگیریم که در آن شما در مورد طول متن مورد نیاز خود برای ذخیره نظری ندارید، یا طول متن را نمی دانید.

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

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

      ما می توانیم اختصاص حافظه را به صورت مثال زیر نشان بدهیم.

      مثال : 

      زمانی که کد بالا توسط کامپایل و اجرا شود، نتیجه زیر را تولید خواهد کرد:

      مثال : 

      همان برنامه را می توان با استفاده از()calloc ؛ فقط با جایگزینی  malloc با calloc بنویسید. به شرح زیر :

      مثال : 

      بنابراین شما کنترل کامل دارید و در هنگام اختصاص حافظه، می توانید هر مقدار اندازه را تنظیم کنید،

      بر خلاف آرایه های عادی که در آن اندازه تعیین شده است و شما نمی توانید آن را تغییر دهید.

      تغییر اندازه و آزاد سازی حافظه در C

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

      اما زمانیکه از تخصیص حافظه پویا استفاده می کنید و دیگر نیازی به حافظه ندارید با فراخوانی تابع()free این حافظه را آزاد کنید.

      در عوض، با فراخوانی()realloc ، می توانید اندازه یک بلوک حافظه اختصاص داده شده را افزایش یا کاهش دهید.

      بگذارید یک بار دیگر برنامه فوق را بررسی کنیم و از توابع()realloc  و()free استفاده کنیم.

      مثال : 

      زمانی که کد بالا توسط کامپایل و اجرا شود، نتیجه زیر را تولید خواهد کرد:

      مثال : 

      شما می توانید مثال بالا را مجددا بدون تخصیص حافظه اضافی امتحان کنید و عملکردهای ()strcat به دلیل عدم وجود حافظه موجود در توضیحات خطایی را ارائه می دهد.

      کلام پایانی

       توضیحاتی در مورد مدیریت حافظه در زبان C ، اختصاص حافظه به صورت پویا و تغییر اندازه و آزاد سازی حافظه در C ارائه شد.

      آرگومان های خط فرمان در زبان C را در جلسه آینده خواهیم داشت.

      QR:  جلسه ۲۸ : مدیریت حافظه در زبان C
      به اشتراک بگذارید