حافظه mem
کار مستقیم با حافظه: تخصیص و آزادسازی، رونوشت، قلمرو و استخر، و بررسی نشتی.
واردسازی حافظه
بیشتر برنامهها هیچوقت به این بسته نیاز ندارند: وکتور و نگاشت و رشته حافظهشان را خودشان مدیریت میکنند. بستهی حافظه برای کارهای سطح پایین است، مثل همکاری با کتابخانههای C یا ساختن ساختمان دادهی خودتان. هر چه با تخصیص میگیرید، باید با آزادسازی پس بدهید.
قلمرو (arena) یک تکه حافظهی بزرگ است که از آن پشتسرهم برمیدارید و در پایان همه را یکجا رها میکنید؛ برای کارهایی با تعداد زیادی شیء کوچک همعمر خیلی سریع است. استخر بلوکهای هماندازه میدهد و پس میگیرد.
گونهها
قلمرو Arena
ساختار قلمرو| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| buf | buf | تهی* | نشانی حافظهی قلمرو. |
| cap | cap | طبیعی۶۴ | ظرفیت بر حسب بایت. |
| used | used | طبیعی۶۴ | مقدار استفادهشده. |
واردسازی حافظه
روال ریشه:
ناپایا ق := حافظه.قلمرو جدید(۱۰۲۴ برگردان طبیعی۶۴)
سرچاپ حافظه.ظرفیت قلمرو(ق)، حافظه.استفاده شده قلمرو(ق)
الف := حافظه.تخصیص در قلمرو(ق، ۱۰۰ برگردان طبیعی۶۴)
ب := حافظه.تخصیص صفرشده در قلمرو(ق، ۲۰۰ برگردان طبیعی۶۴)
سرچاپ الف != پوچ، ب != پوچ، حافظه.استفاده شده قلمرو(ق) >= ۳۰۰، حافظه.باقیمانده قلمرو(ق) <= ۷۲۴
سرچاپ حافظه.تخصیص در قلمرو(ق، ۴۰۰۰ برگردان طبیعی۶۴) == پوچ
حافظه.بازنشانی قلمرو(ق)
سرچاپ حافظه.استفاده شده قلمرو(ق)، ق.cap
حافظه.آزادسازی قلمرو(ق)
پایاناستخر Pool
ساختار استخر| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| block_size | block_size | طبیعی۶۴ | اندازهی هر بلوک. |
| block_count | block_count | طبیعی۶۴ | تعداد بلوکها. |
| blocks | blocks | تهی* | نشانی حافظهی بلوکها. |
| free_list | free_list | تهی* | فهرست بلوکهای آزاد. |
واردسازی حافظه
روال ریشه:
ناپایا ا := حافظه.استخر جدید(۳۲ برگردان طبیعی۶۴، ۴ برگردان طبیعی۶۴)
سرچاپ حافظه.اندازه بلوک(ا)، حافظه.ظرفیت استخر(ا)
ب۱ := حافظه.تخصیص از استخر(ا)
ب۲ := حافظه.تخصیص از استخر(ا)
سرچاپ ب۱ != پوچ، ب۲ != پوچ، ب۱ != ب۲
حافظه.بازگشت به استخر(ا، ب۱)
ب۳ := حافظه.تخصیص از استخر(ا)
سرچاپ ب۳ == ب۱
حافظه.نابودسازی استخر(ا)
پایانروالها
قلمرو جدید NewArena
روال قلمرو جدید(capacity: طبیعی۶۴): قلمرونمونهی این مورد همراه با موارد بالاتر آمده است: mem-Arena.salam
تخصیص در قلمرو ArenaAlloc
روال تخصیص در قلمرو(a &: قلمرو، size: طبیعی۶۴): تهی*نمونهی این مورد همراه با موارد بالاتر آمده است: mem-Arena.salam
تخصیص صفرشده در قلمرو ArenaAllocZeroed
روال تخصیص صفرشده در قلمرو(a &: قلمرو، size: طبیعی۶۴): تهی*نمونهی این مورد همراه با موارد بالاتر آمده است: mem-Arena.salam
بازنشانی قلمرو ArenaReset
روال بازنشانی قلمرو(a &: قلمرو)نمونهی این مورد همراه با موارد بالاتر آمده است: mem-Arena.salam
آزادسازی قلمرو ArenaFree
روال آزادسازی قلمرو(a &: قلمرو)نمونهی این مورد همراه با موارد بالاتر آمده است: mem-Arena.salam
استفاده شده قلمرو ArenaUsed
روال استفاده شده قلمرو(a &: قلمرو): طبیعی۶۴نمونهی این مورد همراه با موارد بالاتر آمده است: mem-Arena.salam
ظرفیت قلمرو ArenaCapacity
روال ظرفیت قلمرو(a &: قلمرو): طبیعی۶۴نمونهی این مورد همراه با موارد بالاتر آمده است: mem-Arena.salam
باقیمانده قلمرو ArenaRemaining
روال باقیمانده قلمرو(a &: قلمرو): طبیعی۶۴نمونهی این مورد همراه با موارد بالاتر آمده است: mem-Arena.salam
استخر جدید NewPool
روال استخر جدید(block_size: طبیعی۶۴، block_count: طبیعی۶۴): استخرنمونهی این مورد همراه با موارد بالاتر آمده است: mem-Pool.salam
تخصیص از استخر PoolAlloc
روال تخصیص از استخر(p &: استخر): تهی*نمونهی این مورد همراه با موارد بالاتر آمده است: mem-Pool.salam
بازگشت به استخر PoolFree
روال بازگشت به استخر(p &: استخر، ptr: تهی*)نمونهی این مورد همراه با موارد بالاتر آمده است: mem-Pool.salam
اندازه بلوک PoolBlockSize
روال اندازه بلوک(p &: استخر): طبیعی۶۴نمونهی این مورد همراه با موارد بالاتر آمده است: mem-Pool.salam
ظرفیت استخر PoolCapacity
روال ظرفیت استخر(p &: استخر): طبیعی۶۴نمونهی این مورد همراه با موارد بالاتر آمده است: mem-Pool.salam
نابودسازی استخر PoolDestroy
روال نابودسازی استخر(p &: استخر)نمونهی این مورد همراه با موارد بالاتر آمده است: mem-Pool.salam
تخصیص Allocate
روال تخصیص(size: طبیعی۶۴): تهی*واردسازی حافظه
روال ریشه:
ب := حافظه.تخصیص(۸ برگردان طبیعی۶۴)
حافظه.تنظیم(ب، ۰، ۸ برگردان طبیعی۶۴)
ا := ب برگردان صحیح۸*
ا[۰] = ۶۵ برگردان صحیح۸
ا[۱] = ۶۶ برگردان صحیح۸
ب۲ := حافظه.تخصیص صفرشده(۸ برگردان طبیعی۶۴)
حافظه.کپی(ب۲، ب، ۲ برگردان طبیعی۶۴)
ا۲ := ب۲ برگردان صحیح۸*
سرچاپ ا۲[۰]، ا۲[۱]، ا۲[۲]
حافظه.جابجایی حافظه(ب، (ب برگردان صحیح۶۴ + ۱) برگردان تهی*، ۱ برگردان طبیعی۶۴)
سرچاپ ا[۰]
ب۳ := حافظه.بازتخصیص(ب، ۶۴ برگردان طبیعی۶۴)
آ := حافظه.تخصیص آرایه(۴ برگردان طبیعی۶۴، ۸ برگردان طبیعی۶۴)
آ۶۴ := آ برگردان صحیح۶۴*
سرچاپ آ۶۴[۳]
حافظه.آزادسازی(ب۳)
حافظه.آزادسازی(ب۲)
حافظه.آزادسازی(آ)
پایانبازتخصیص Reallocate
روال بازتخصیص(ptr: تهی*، size: طبیعی۶۴): تهی*نمونهی این مورد همراه با موارد بالاتر آمده است: mem-Allocate.salam
آزادسازی Free
روال آزادسازی(ptr: تهی*)نمونهی این مورد همراه با موارد بالاتر آمده است: mem-Allocate.salam
تنظیم Set
روال تنظیم(ptr: تهی*، value: صحیح، n: طبیعی۶۴)n بایت را با مقدار دادهشده پر میکند.نمونهی این مورد همراه با موارد بالاتر آمده است: mem-Allocate.salam
کپی Copy
روال کپی(dst: تهی*، src: تهی*، n: طبیعی۶۴)n بایت را رونوشت میکند؛ دو بازه نباید همپوشانی داشته باشند.نمونهی این مورد همراه با موارد بالاتر آمده است: mem-Allocate.salam
جابجایی حافظه MemMove
روال جابجایی حافظه(dst: تهی*، src: تهی*، n: طبیعی۶۴): تهی*نمونهی این مورد همراه با موارد بالاتر آمده است: mem-Allocate.salam
تخصیص صفرشده AllocateZeroed
روال تخصیص صفرشده(size: طبیعی۶۴): تهی*نمونهی این مورد همراه با موارد بالاتر آمده است: mem-Allocate.salam
تخصیص آرایه AllocateArray
روال تخصیص آرایه(count: طبیعی۶۴، size: طبیعی۶۴): تهی*count عضو هر کدام size بایت.نمونهی این مورد همراه با موارد بالاتر آمده است: mem-Allocate.salam
شمار تخصیص AllocCount
روال شمار تخصیص(): صحیح۶۴واردسازی حافظه
روال ریشه:
سرچاپ حافظه.اشکال زدایی حافظه فعال است()، حافظه.ای سن فعال است()، حافظه.بررسی حافظه فعال است()
سرچاپ حافظه.شمار تخصیص()، حافظه.شمار آزادسازی()، حافظه.بایت های زنده()، حافظه.بیشترین بایت ها()
حافظه.بررسی نشتی()
پایانشمار آزادسازی FreeCount
روال شمار آزادسازی(): صحیح۶۴نمونهی این مورد همراه با موارد بالاتر آمده است: mem-Debug.salam
بایت های زنده LiveBytes
روال بایت های زنده(): صحیح۶۴نمونهی این مورد همراه با موارد بالاتر آمده است: mem-Debug.salam
بیشترین بایت ها PeakBytes
روال بیشترین بایت ها(): صحیح۶۴نمونهی این مورد همراه با موارد بالاتر آمده است: mem-Debug.salam
اشکال زدایی حافظه فعال است IsMemDebug
روال اشکال زدایی حافظه فعال است(): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: mem-Debug.salam
ای سن فعال است IsAsanActive
روال ای سن فعال است(): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: mem-Debug.salam
بررسی حافظه فعال است MemDebugActive
روال بررسی حافظه فعال است(): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: mem-Debug.salam
بررسی نشتی CheckLeaks
روال بررسی نشتی()نمونهی این مورد همراه با موارد بالاتر آمده است: mem-Debug.salam