.\" -*- coding: UTF-8 -*- '\" t .\" Copyright 2012, Michael Kerrisk .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH mallinfo 3 "22 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم mallinfo، mallinfo2 \- الحصول على معلومات تخصيص الذاكرة .SH المكتبة مكتبة سي المعيارية (\fIlibc\fP،\ \fI\-lc\fP) .SH موجز .nf \fB#include \fP .P \fBstruct mallinfo mallinfo(void);\fP \fBstruct mallinfo2 mallinfo2(void);\fP .fi .SH الوصف ترجع هذه الدوال نسخة من بنية تحتوي على معلومات حول تخصيصات الذاكرة التي تُنفذ بواسطة \fBmalloc\fP(3) والدوال ذات الصلة. تحتوي البنية التي ترجعها كل دالة على نفس الحقول. ومع ذلك، فإن الدالة الأقدم، \fBmallinfo\fP()، مُهملة لأن النوع المستخدم للحقول صغير جدًا (انظر BUGS). .P لاحظ أنه ليست كل التخصيصات مرئية لهذه الدوال؛ انظر BUGS وفكر في استخدام \fBmalloc_info\fP(3) بدلاً من ذلك. .P تُعرف بنية \fImallinfo2\fP التي ترجعها \fBmallinfo2\fP() كما يلي: .P .in +4n .EX struct mallinfo2 { size_t arena; /* المساحة المخصصة غير المُعيَّنة بـ mmap (بايت) */ size_t ordblks; /* عدد القطع الحرة */ size_t smblks; /* عدد كتل fastbin الحرة */ size_t hblks; /* عدد المناطق المُعيَّنة بـ mmap */ size_t hblkhd; /* المساحة المخصصة في المناطق المُعيَّنة بـ mmap (بايت) */ size_t usmblks; /* انظر أدناه */ size_t fsmblks; /* المساحة في كتل fastbin المحررة (بايت) */ size_t uordblks; /* إجمالي المساحة المخصصة (بايت) */ size_t fordblks; /* إجمالي المساحة الحرة (بايت) */ size_t keepcost; /* المساحة القابلة للتحرير في الأعلى (بايت) */ }; .EE .in .P بنية \fImallinfo\fP التي ترجعها الدالة المُهملة \fBmallinfo\fP() هي نفسها تمامًا، باستثناء أن الحقول مكتوبة كنوع \fIint\fP. .P تحتوي حقول البنية على المعلومات التالية: .TP 10 \fIarena\fP إجمالي كمية الذاكرة المخصصة بوسائل غير \fBmmap\fP(2) (أي الذاكرة المخصصة على الكومة). يشمل هذا الرقم الكتل قيد الاستخدام والكتل الموجودة في القائمة الحرة. .TP \fIordblks\fP عدد الكتل الحرة العادية (أي غير fastbin). .TP \fIsmblks\fP .\" the glibc info page wrongly says this field is unused .\" https://sourceware.org/bugzilla/show_bug.cgi?id=26746 عدد كتل fastbin الحرة (انظر \fBmallopt\fP(3)). .TP \fIhblks\fP عدد الكتل المخصصة حاليًا باستخدام \fBmmap\fP(2). (انظر مناقشة \fBM_MMAP_THRESHOLD\fP في \fBmallopt\fP(3).) .TP \fIhblkhd\fP عدد البايتات في الكتل المخصصة حاليًا باستخدام \fBmmap\fP(2). .TP \fIusmblks\fP .\" It seems to have been zero since at least as far back as glibc 2.15 هذا الحقل غير مستخدم، وقيمته دائمًا 0. تاريخيًا، كان "علامة المياه العالية" للمساحة المخصصة\[em]أي، أقصى كمية من المساحة تم تخصيصها على الإطلاق (بالبايت)؛ كان هذا الحقل يُحافظ عليه فقط في بيئات غير متعددة الخيوط. .TP \fIfsmblks\fP .\" the glibc info page wrongly says this field is unused .\" https://sourceware.org/bugzilla/show_bug.cgi?id=26746 إجمالي عدد البايتات في الكتل الحرة في السلة السريعة. .TP \fIuordblks\fP إجمالي عدد البايتات المستخدمة بواسطة التخصيصات قيد الاستخدام. .TP \fIfordblks\fP إجمالي عدد البايتات في الكتل الحرة. .TP \fIkeepcost\fP المبلغ الإجمالي للمساحة الحرة القابلة للتحرير في أعلى الكومة. هذا هو أقصى عدد من البايتات التي يمكن تحريرها نظريًا (أي بتجاهل قيود محاذاة الصفحة، وما إلى ذلك) بواسطة \fBmalloc_trim\fP(3). .SH السمات للاطلاع على شرح للمصطلحات المستخدمة في هذا القسم، انظر \fBattributes\fP(7). .TS allbox; lb lb lbx l l l. الواجهة السمة القيمة T{ .na .nh \fBmallinfo\fP(), \fBmallinfo2\fP() T} سلامة الخيوط T{ .na .nh MT\-Unsafe init const:mallopt T} .TE .P \fBmallinfo\fP()/ \fBmallinfo2\fP() تصل إلى بعض الكائنات الداخلية العامة. إذا تم تعديلها بغير ذرية، فقد تُحصل نتائج غير متناسقة. المعرف \fImallopt\fP في \fIconst:mallopt\fP يعني أن \fBmallopt\fP() تعدل الكائنات الداخلية العامة بذرية، مما يضمن أن \fBmallinfo\fP()/ \fBmallinfo2\fP() آمنة بما يكفي، بينما التعديلات الأخرى بغير ذرية قد لا تكون كذلك. .SH المعايير لا شيء. .SH التاريخ .TP \fBmallinfo\fP() glibc 2.0. SVID. .TP \fBmallinfo2\fP() .\" commit e3960d1c57e57f33e0e846d615788f4ede73b945 glibc 2.33. .SH العلل .\" FIXME . http://sourceware.org/bugzilla/show_bug.cgi?id=208 .\" See the 24 Aug 2011 mail by Paul Pluzhnikov: .\" "[patch] Fix mallinfo() to accumulate results for all arenas" .\" on libc-alpha@sourceware.org \fBتُعاد المعلومات لمنطقة تخصيص الذاكرة الرئيسية فقط.\fP تُستبعد التخصيصات في الساحات الأخرى. انظر \fBmalloc_stats\fP(3) و \fBmalloc_info\fP(3) لبدائل تتضمن معلومات عن الساحات الأخرى. .P حقول بنية \fImallinfo\fP التي تُعاد بواسطة الدالة الأقدم \fBmallinfo\fP() مكتوبة كنوع \fIint\fP. ومع ذلك، لأن بعض قيم المحاسبة الداخلية قد تكون من نوع \fIlong\fP، فقد تلتف القيم المبلغ عنها حول الصفر وبالتالي تكون غير دقيقة. .SH أمثلة يستخدم البرنامج أدناه \fBmallinfo2\fP() لاسترداد إحصائيات تخصيص الذاكرة قبل وبعد تخصيص وتحرير بعض كتل الذاكرة. تُعرض الإحصائيات على المخرج القياسي. .P تحدد الوسيطتان الأوليان لسطر الأوامر عدد وحجم الكتل التي سيتم تخصيصها باستخدام \fBmalloc\fP(3). .P الوسائط الثلاثة المتبقية تُحدد أي من الكتل المخصصة يجب تحريرها باستخدام \fBfree\fP(3). هذه الوسائط الثلاثة اختيارية، وتُحدد (بالترتيب): حجم الخطوة المستخدم في الحلقة التي تحرر الكتل (المبدئي هو 1، أي تحرير جميع الكتل في النطاق)؛ الموضع الترتيبي لأول كتلة يُراد تحريرها (المبدئي 0، أي أول كتلة مخصصة)؛ ورقم أكبر بواحد من الموضع الترتيبي لآخر كتلة يُراد تحريرها (المبدئي هو أكبر بواحد من رقم الكتلة الأقصى). إذا حُذفت هذه الوسائط الثلاثة، فإن المبدئيات تؤدي إلى تحرير جميع الكتل المخصصة. .P في تشغيل المثال التالي للبرنامج، أُجريت 1000 تخصيص بحجم 100 بايت، ثم حُررت كل كتلة مخصصة ثانية: .P .in +4n .EX $\fB ./a.out 1000 100 2\fP; ============== Before allocating blocks ============== Total non\-mmapped bytes (arena): 0 # of free chunks (ordblks): 1 # of free fastbin blocks (smblks): 0 # of mapped regions (hblks): 0 Bytes in mapped regions (hblkhd): 0 Max.\& total allocated space (usmblks): 0 Free bytes held in fastbins (fsmblks): 0 Total allocated space (uordblks): 0 Total free space (fordblks): 0 Topmost releasable block (keepcost): 0 \& ============== After allocating blocks ============== Total non\-mmapped bytes (arena): 135168 # of free chunks (ordblks): 1 # of free fastbin blocks (smblks): 0 # of mapped regions (hblks): 0 Bytes in mapped regions (hblkhd): 0 Max.\& total allocated space (usmblks): 0 Free bytes held in fastbins (fsmblks): 0 Total allocated space (uordblks): 104000 Total free space (fordblks): 31168 Topmost releasable block (keepcost): 31168 \& ============== After freeing blocks ============== Total non\-mmapped bytes (arena): 135168 # of free chunks (ordblks): 501 # of free fastbin blocks (smblks): 0 # of mapped regions (hblks): 0 Bytes in mapped regions (hblkhd): 0 Max.\& total allocated space (usmblks): 0 Free bytes held in fastbins (fsmblks): 0 Total allocated space (uordblks): 52000 Total free space (fordblks): 83168 Topmost releasable block (keepcost): 31168 .EE .in .SS "مصدر البرنامج" .\" SRC BEGIN (mallinfo.c) \& .EX #include #include #include \& #define streq(...) (strcmp(__VA_ARGS__) == 0) \& static void display_mallinfo2(void) { struct mallinfo2 mi; \& mi = mallinfo2(); \& printf("Total non\-mmapped bytes (arena): %zu\[rs]n", mi.arena); printf("# of free chunks (ordblks): %zu\[rs]n", mi.ordblks); printf("# of free fastbin blocks (smblks): %zu\[rs]n", mi.smblks); printf("# of mapped regions (hblks): %zu\[rs]n", mi.hblks); printf("Bytes in mapped regions (hblkhd): %zu\[rs]n", mi.hblkhd); printf("Max.\& total allocated space (usmblks): %zu\[rs]n", mi.usmblks); printf("Free bytes held in fastbins (fsmblks): %zu\[rs]n", mi.fsmblks); printf("Total allocated space (uordblks): %zu\[rs]n", mi.uordblks); printf("Total free space (fordblks): %zu\[rs]n", mi.fordblks); printf("Topmost releasable block (keepcost): %zu\[rs]n", mi.keepcost); } \& int main(int argc, char *argv[]) { #define MAX_ALLOCS 500000 char *alloc[MAX_ALLOCS]; size_t blockSize, numBlocks, freeBegin, freeEnd, freeStep; \& if (argc < 3 || streq(argv[1], "\-\-help")) { fprintf(stderr, "%s num\-blocks block\-size [free\-step " "[start\-free [end\-free]]]\[rs]n", argv[0]); exit(EXIT_FAILURE); } \& numBlocks = atoi(argv[1]); blockSize = atoi(argv[2]); freeStep = (argc > 3) ? atoi(argv[3]) : 1; freeBegin = (argc > 4) ? atoi(argv[4]) : 0; freeEnd = (argc > 5) ? atoi(argv[5]) : numBlocks; \& printf("============== Before allocating blocks ==============\[rs]n"); display_mallinfo2(); \& for (size_t j = 0; j < numBlocks; j++) { if (numBlocks >= MAX_ALLOCS) { fprintf(stderr, "Too many allocations\[rs]n"); exit(EXIT_FAILURE); } \& alloc[j] = malloc(blockSize); if (alloc[j] == NULL) { perror("malloc"); exit(EXIT_FAILURE); } } \& printf("\[rs]n============== After allocating blocks ==============\[rs]n"); display_mallinfo2(); \& for (size_t j = freeBegin; j < freeEnd; j += freeStep) free(alloc[j]); \& printf("\[rs]n============== After freeing blocks ==============\[rs]n"); display_mallinfo2(); \& exit(EXIT_SUCCESS); } .EE .\" SRC END .SH "انظر أيضًا" .ad l .nh \fBmmap\fP(2), \fBmalloc\fP(3), \fBmalloc_info\fP(3), \fBmalloc_stats\fP(3), \fBmalloc_trim\fP(3), \fBmallopt\fP(3) .PP .SH ترجمة تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي . .PP هذه الترجمة هي وثيقة مجانية؛ راجع .UR https://www.gnu.org/licenses/gpl-3.0.html رخصة جنو العامة الإصدار 3 .UE أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات. .PP إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: .MT kde-l10n-ar@kde.org .ME .