رفتن به مطلب
بازگشایی انجمن! ×
GuardIran

تخصیص حافظه پویا و مدیریت حافظه در C


R3XCR4PY

پست های پیشنهاد شده

سلام و درود خدمت همگی دوستان.

 

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

 

متغیرهایی مثل متغیرهای زیر در حافظه استک (Stack) ذخیره می شوند.

This is the hidden content, please

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

 

برای اینکه بتونیم در زمان اجرای برنامه میزان حافظه یک متغیر را مشخص کنیم باید از حافظه هیپ (Heap) استفاده کنیم.

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

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

 

چهار تابع در زبان سی برای مدیریت حافظه وجود دارد که عبارتند از: malloc, calloc, free و realloc.

این توابع در فایل هدر stdlib.h قرار دارند.

 

تابع malloc:

این تابع میزان حافظه مورد نیاز به بایت را گرفته و درصورتی که این مقدار حافظه وجود داشته باشه یک اشاره گر (Pointer) به آن بر میگرداند.

This is the hidden content, please

در کد بالا ۱۰ ضربدر سایز int شده و به این معنی است که به اندازه ۱۰ اینتیجر حافظه به ptr اختصاص داده شود.

در صورتی که این مقدار حافظه موجود باشد یک اشاره گر به آن برگردانده میشود و در غیر این صورت ptr برابر با NULL می شود.

 

تابع calloc:

این تابع شباهت زیادی به malloc دارد.

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

This is the hidden content, please

 

تفاوت malloc و calloc در این است که malloc حافظه تخصیص داده شده را مقداردهی اولیه نمی کند ولی calloc حافظه را با صفر مقداردهی اولیه می کند.

 

تابع free:

همانطور که گفتیم حافظه های اختصاص داده شده به صورت خودکار آزاد نمی شوند.

برای آزاد کردن حافظه باید از تابع free استفاده کنیم.

این تابع یک اشاره گر به حافظه را می گیرد و آن حافظه را آزاد می کند.

This is the hidden content, please

 

تابع realloc:

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

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

This is the hidden content, please

 

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر


به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • ایجاد مورد جدید...