پروژه LWMalloc یه memory allocator سبک برای سیستمهای امبدده که نسبت به ptmalloc تو Glibc تا ۵۳٪ سریعتره و ۲۳٪ هم حافظه کمتری مصرف میکنه.
مشکل malloc تو امبدد اینه که به مرور حافظه رو تکهتکه میکنه و وقتی فریمور طولانیمدت بالا بمونه آخرش به کرش میرسه. بعضیا سمت garbage collection میرن، ولی روی دیوایسهای محدود خیلی وقتا عملی نیست. به همین خاطر خیلیا ترجیح میدن حافظه رو استاتیک یا با memory pool مدیریت کنن (که به نظر من بهترین راهه). یه گزینه دیگه هم نوشتن allocator اختصاصیه (که از نظر من بدترین راهه!)، و این دقیقاً کاریه که LWMalloc کرده.
طبق مقاله “LWMalloc: A Lightweight Dynamic Memory Allocator for Resource-Constrained Environments”، این لایبرری از ساختار داده خیلی سبک، سیاست deferred coalescing و استخرهای جدا برای chunkهای کوچیک استفاده میکنه. نتیجه؟ متادیتای کمتر، عملیات ادغام بهموقع به جای وسط کار، و پاسخ O(1) برای درخواستهای کوچیک.
تستهای دانشگاه SEOULTECH نشون داده LWMalloc نسبت به ptmalloc حدود ۵۳٪ سریعتره و ۲۳٪ کمتر حافظه میخوره. کل کدش ۵۳۰ خط و footprint حدود ۲۰ کیلوبایته، در حالی که ptmalloc نزدیک ۴۸۳۸ خط و ۱۱۶ کیلوبایته. تو اطلاعیهشون هم اشاره کردن که allocatorهایی مثل jemalloc، tcmalloc و mimalloc هستن ولی به خاطر مصرف حافظه بالا و پیچیدگی آخرش افت کارایی دارن.
کد C و برنامه تستش روی گیتهاب هست و چون همون malloc/calloc/realloc/free استاندارد رو پیادهسازی کرده، میشه مستقیم جاش استفاده کرد یا حتی با LD_PRELOAD بدون تغییر اپلیکیشن جایگزینش کرد.
کاربرد اصلیش تو سیستمهای امبدد و IoT با محدودیت حافظه و کاراییه: از تلویزیون هوشمند و ستتاپباکس گرفته تا پوشیدنیها، سیستمهای خودرویی real-time و کامپیوترهای edge برای AI.
ولی راستش رو بخواید، من همچنان روشهای استاتیک یا memory pool رو پیشنهاد میکنم، مگر اینکه اسلحه رو سرتون باشه :)
اگه دوست داشتید اصل مقاله رو مطالعه کنید اینجا میتونید پیداش کنید.
ریپوی پروژه رو هم اینجا میتونید بررسی کنید.
📺Source
📡openpcb
Post #275
5.64K

- 👍 13
- ❤ 2
- ⚡ 1