table of contents
- unstable 4.31.0-1
| memusage(1) | General Commands Manual | memusage(1) |
الاسم¶
memusage - تشكيلة استخدام الذاكرة لبرنامج
موجز¶
memusage |
[option ...] program [programoption ...] |
الوصف¶
memusage هو سكربت bash(1) يشكل استخدام الذاكرة للبرنامج، program. يحمل آلي المكتبة libmemusage.so في بيئة المتصل (عبر متغير البيئة LD_PRELOAD؛ انظر ld.so(8)). تتعقب المكتبة libmemusage.so تخصيص الذاكرة باعتراض استدعاءات malloc(3)، calloc(3)، free(3)، و realloc(3)؛ اختياريا، يمكن اعتراض استدعاءات mmap(2)، mremap(2)، و munmap(2).
يمكن لـ memusage إخراج البيانات المجمعة في شكل نصي، أو يمكنه استخدام memusagestat(1) (انظر الخيار -p، أدناه) لإنشاء ملف PNG يحتوي على تمثيل رسومي للبيانات المجمعة.
ملخص استخدام الذاكرة¶
يحتوي سطر "ملخص استخدام الذاكرة" الذي يخرجه memusage على ثلاثة حقول:
- heap total
- مجموع وسائط size لجميع استدعاءات malloc(3)، وحاصل ضرب الوسائط (n*size) لجميع استدعاءات calloc(3)، ومجموع وسائط length لجميع استدعاءات mmap(2). في حالة realloc(3) و mremap(2)، إذا كان الحجم الجديد للتخصيص أكبر من الحجم السابق، يُضاف مجموع كل هذه الفروق (الحجم الجديد ناقص الحجم القديم).
- heap peak
- أقصى قيمة لجميع وسائط size لـ malloc(3)، وجميع حواصل ضرب n*size لـ calloc(3)، وجميع وسائط size لـ realloc(3)، ووسائط length لـ mmap(2)، ووسائط new_size لـ mremap(2).
- stack peak
- قبل أول استدعاء لأي دالة مراقبة، يُحفظ عنوان مؤشر المكدس (مؤشر المكدس الأساسي). بعد كل استدعاء دالة، يُقرأ عنوان مؤشر المكدس الفعلي ويُحسب الفرق من مؤشر المكدس الأساسي. أقصى هذه الفروق هو ذروة المكدس.
مباشرة بعد سطر الملخص هذا، يعرض جدول عدد الاستدعاءات، إجمالي الذاكرة المخصصة أو الملغاة، وعدد الاستدعاءات الفاشلة لكل دالة معترضة. بالنسبة لـ realloc(3) و mremap(2)، يظهر الحقل الإضافي "nomove" إعادة التخصيص التي غيرت عنوان كتلة، ويظهر الحقل الإضافي "dec" إعادة التخصيص التي قللت حجم الكتلة. بالنسبة لـ realloc(3)، يظهر الحقل الإضافي "free" إعادة التخصيص التي تسببت في تحرير كتلة (أي كان الحجم المعاد تخصيصه 0).
لا يعكس "realloc/total memory" في الجدول الذي يخرجه memusage الحالات التي يُستخدم فيها realloc(3) لإعادة تخصيص كتلة ذاكرة بحجم أصغر من السابق. يمكن أن يتسبب هذا في أن يكون مجموع جميع خلايا "total memory" (باستثناء "free") أكبر من خلية "free/total memory".
رسم بياني لأحجام الكتل¶
يوفر "Histogram for block sizes" تفصيلا لتخصيصات الذاكرة إلى أحجام دلاء مختلفة.
الخيارات¶
- -n اسم
- --progname=name
- اسم ملف البرنامج لتشكيلته.
- -p ملف
- --png=file
- توليد رسم PNG وتخزينه في file.
- -d ملف
- --data=file
- توليد ملف بيانات ثنائي وتخزينه في file.
- -u
- --unbuffered
- لا تخزين مؤقت للمخرجات.
- -b حجم
- --buffer=size
- اجمع size إدخالاً قبل كتابتها.
- --no-timer
- عطّل أخذ العينات المستند إلى المؤقت (SIGPROF) لقيمة مؤشر المكدس.
- -m
- --mmap
- تتبّع أيضًا mmap(2) وmremap(2) وmunmap(2).
- -?
- --help
- طباعة المساعدة ثم الخروج.
- --usage
- اطبع رسالة استخدام قصيرة واخرج.
- -V
- --version
- اطبع معلومات الإصدار واخرج.
- تنطبق الخيارات التالية فقط عند توليد مخرجات رسومية:
- -t
- --time-based
- استخدم الوقت (بدلاً من عدد استدعاءات الوظائف) كمقياس لمحور X.
- -T
- --total
- ارسم أيضًا رسماً بيانياً لاستخدام الذاكرة الكلي.
- --title=name
- استخدم name كعنوان للرسم البياني.
- -x size
- --x-size=الحجم
- اجعل الرسم البياني بعرض size بكسل.
- -y size
- --y-size=الحجم
- اجعل الرسم البياني بارتفاع size بكسل.
حالة الخروج¶
حالة الخروج لـ memusage مساوية لحالة خروج البرنامج المُنمذَج.
العلل¶
للإبلاغ عن العيوب، انظر http://www.gnu.org/software/libc/bugs.html
أمثلة¶
فيما يلي برنامج بسيط يعيد تخصيص كتلة ذاكرة في دورات ترتفع إلى ذروة ثم تعيد تخصيص الذاكرة دورياً في كتل أصغر تعود إلى الصفر. بعد ترجمة البرنامج وتشغيل الأوامر التالية، يمكن العثور على رسم بياني لاستخدام الذاكرة للبرنامج في الملف memusage.png:
$ memusage --data=memusage.dat ./a.out; ... Memory usage summary: heap total: 45200, heap peak: 6440, stack peak: 224
total calls total memory failed calls
malloc| 1 400 0 realloc| 40 44800 0 (nomove:40, dec:19, free:0)
calloc| 0 0 0
free| 1 440 Histogram for block sizes:
192-207 1 2% ================ ...
2192-2207 1 2% ================
2240-2255 2 4% =================================
2832-2847 2 4% =================================
3440-3455 2 4% =================================
4032-4047 2 4% =================================
4640-4655 2 4% =================================
5232-5247 2 4% =================================
5840-5855 2 4% =================================
6432-6447 1 2% ================ $ memusagestat memusage.dat memusage.png;
مصدر البرنامج¶
#include <stdio.h>
#include <stdlib.h>
#define CYCLES 20
int
main(int argc, char *argv[])
{
int i, j;
size_t size;
int *p;
size = sizeof(*p) * 100;
printf("malloc: %zu\n", size);
p = malloc(size);
for (i = 0; i < CYCLES; i++) {
if (i < CYCLES / 2)
j = i;
else
j--;
size = sizeof(*p) * (j * 50 + 110);
printf("realloc: %zu\n", size);
p = realloc(p, size);
size = sizeof(*p) * ((j + 1) * 150 + 110);
printf("realloc: %zu\n", size);
p = realloc(p, size);
}
free(p);
exit(EXIT_SUCCESS);
}
انظر أيضًا¶
ترجمة¶
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>
هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.
إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.
| 8 فبراير 2026 | صفحات دليل لينكس 6.18 |