سؤال

طلبي هو الغالب في تنظيم طبقات لذا وجدت أن شيئا مثل 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), ولكن باستخدام العديد من mmaps علوية.

متغيرات البيئة MALLOC_MMAP_THRESHOLD_ الخ.سيتم أيضا تعيين هذه الخيارات.

ومن الواضح الذاكرة malloc يخصص مع mmap يتم تحرير مع munmap.أنا لست متأكدا مما إذا كان أي من هذه موثقة في أي مكان خارج سي العمومية التعليمات البرمجية المصدر أو أي التوافق ضمانات.

نصائح أخرى

ديف هانسون ج واجهات تطبيقات وقد ضبطها بعناية واحدة-حمام سباحة مخصص.هل يمكن ربطها معا لجعل الهرمي مخصص ، التي من شأنها أن تكون أبسط من المتداول الخاصة بك من الصفر.

لك هل وقد التنميط النتائج التي تظهر إدارة الذاكرة كبير عنق الزجاجة ، أليس كذلك ؟ أو تحاول تبسيط API من أجل تخصيص ؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top