الهرمية الذاكرة مخصص مكتبة C++
-
08-07-2019 - |
سؤال
طلبي هو الغالب في تنظيم طبقات لذا وجدت أن شيئا مثل APR الذاكرة برك ستكون أفضل طريقة.
في حين أن القراءة على ذلك عن C++ placement new
وظائف هنا & هنا, ، المزيد من generic ج تخصيص السؤال كنت أفكر من ناحية صياغة الهرمي حمام سباحة مخصص كما اقترح في وظيفة واحدة ، ولكن في نقي ني التقليد أنا أول من يسأل إذا كان هناك شيء مثل هذا موجود بالفعل.
كما يمكن أن يكون لطيفة الملكية من كونها قادرة على إعادة الذاكرة غير المستخدمة إلى نظام التشغيل (منذ تخصيص يمكن القيام به مع mmap(MAP_ANON)
) أو يمكن أن يكون تخصيص من المكدس كما اقترح Ferrucico هنا.
المحلول
أنا أعرف جيد آخر الهرمية مخصص الذاكرة ، لكنه يدعو malloc
تحت الأغطية.
talloc هو الهرمية تجمع على أساس مخصص الذاكرة مع المتلفات.ذلك هو جوهر مخصص الذاكرة المستخدمة في Samba4 و جعلت فرقا كبيرا في جوانب عديدة من Samba4 التنمية.
للحصول بدأت مع talloc, أنصح لك قراءة talloc دليل.
أن يقال, سي العمومية هو malloc
يستخدم بالفعل mmap(MAP_ANON)
لتخصيص أكبر من mmap_threshold
, والتي يمكنك تعيين عن طريق mallopt(M_MMAP_THRESHOLD, bytes)
.افتراضيا يتم تعديلها بشكل ديناميكي بين
/*
MMAP_THRESHOLD_MAX and _MIN are the bounds on the dynamically
adjusted MMAP_THRESHOLD.
*/
#ifndef DEFAULT_MMAP_THRESHOLD_MIN
#define DEFAULT_MMAP_THRESHOLD_MIN (128 * 1024)
#endif
#ifndef DEFAULT_MMAP_THRESHOLD_MAX
/* For 32-bit platforms we cannot increase the maximum mmap
threshold much because it is also the minimum value for the
maximum heap size and its alignment. Going above 512k (i.e., 1M
for new heaps) wastes too much address space. */
# if __WORDSIZE == 32
# define DEFAULT_MMAP_THRESHOLD_MAX (512 * 1024)
# else
# define DEFAULT_MMAP_THRESHOLD_MAX (4 * 1024 * 1024 * sizeof(long))
# endif
#endif
احترس إذا كنت أقل من ذلك ؛ بشكل افتراضي لا أكثر من #define DEFAULT_MMAP_MAX 65536
القطع التي سيتم تخصيصها باستخدام mmap
.هذا يمكن أن يتغير مع mallopt(M_MMAP_MAX, count)
, ولكن باستخدام العديد من mmap
s علوية.
متغيرات البيئة MALLOC_MMAP_THRESHOLD_
الخ.سيتم أيضا تعيين هذه الخيارات.
ومن الواضح الذاكرة malloc
يخصص مع mmap
يتم تحرير مع munmap
.أنا لست متأكدا مما إذا كان أي من هذه موثقة في أي مكان خارج سي العمومية التعليمات البرمجية المصدر أو أي التوافق ضمانات.
نصائح أخرى
ديف هانسون ج واجهات تطبيقات وقد ضبطها بعناية واحدة-حمام سباحة مخصص.هل يمكن ربطها معا لجعل الهرمي مخصص ، التي من شأنها أن تكون أبسط من المتداول الخاصة بك من الصفر.
لك هل وقد التنميط النتائج التي تظهر إدارة الذاكرة كبير عنق الزجاجة ، أليس كذلك ؟ أو تحاول تبسيط API من أجل تخصيص ؟