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);
    }

انظر أيضًا
memusagestat(1), mtrace(1), ld.so(8)

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.