R3XCR4PY ارسال شده در مِی 10 2021 گزارش اشتراک گذاری ارسال شده در مِی 10 2021 سلام و درود خدمت همگی دوستان. همونجور که میدونید در زبان 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 ورود یا ثبت نام واکنش ها : RT3N، backpack، C0d3!Nj3ct!0n و 3 نفر دیگر 5 1 نقل قول لینک به دیدگاه به اشتراک گذاری در سایت های دیگر گزینه های به اشتراک گذاری بیشتر...
پست های پیشنهاد شده
به گفتگو بپیوندید
هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .