.\" -*- coding: UTF-8 -*- .\" 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 mallopt 3 "8 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم mallopt \- ضبط معاملات تخصيص الذاكرة .SH المكتبة مكتبة سي المعيارية (\fIlibc\fP،\ \fI\-lc\fP) .SH موجز .nf \fB#include \fP .P \fBint mallopt(int \fP\fIparam\fP\fB, int \fP\fIvalue\fP\fB);\fP .fi .SH الوصف تُعدّل دالة \fBmallopt\fP() المعاملات التي تتحكم في سلوك دوال تخصيص الذاكرة (انظر \fBmalloc\fP(3)). تُحدد الوسيطة \fIparam\fP المعامل المراد تعديله، وتُحدد \fIvalue\fP القيمة الجديدة لذلك المعامل. .P يمكن تحديد القيم التالية لـ \fIparam\fP: .TP \fBM_ARENA_MAX\fP إذا كان لهذا المعامل قيمة غير صفرية، فإنه يُحدد حدًا صارمًا على العدد الأقصى من الساحات التي يمكن إنشاؤها. تمثل الساحة مجموعة من الذاكرة يمكن استخدامها بواسطة استدعاءات \fBmalloc\fP(3) (وما شابهها) لخدمة طلبات التخصيص. الساحات آمنة للخيوط، وبالتالي قد تحتوي على طلبات ذاكرة متزامنة متعددة. المفاضلة هي بين عدد الخيوط وعدد الساحات. كلما زاد عدد الساحات، انخفض التنافس لكل خيط، ولكن زاد استخدام الذاكرة. .IP القيمة المبدئية لهذا المعامل هي 0، مما يعني أن الحد على عدد الساحات يُحدد وفقًا لإعداد \fBM_ARENA_TEST\fP. .IP هذا المعامل متاح منذ glibc 2.10 عبر \fB\-\-enable\-experimental\-malloc\fP، ومنذ glibc 2.15 بشكل مبدئي. في بعض إصدارات المخصص، لم يكن هناك حد على عدد الساحات المنشأة (مثل CentOS 5, RHEL 5). .IP عند استخدام إصدارات أحدث من glibc، قد تُظهر التطبيقات في بعض الحالات تنافسًا عاليًا عند الوصول إلى الساحات. في هذه الحالات، قد يكون من المفيد زيادة \fBM_ARENA_MAX\fP لمطابقة عدد الخيوط. هذا مشابه في السلوك للاستراتيجيات التي تتبعها tcmalloc و jemalloc (مثل تجمعات التخصيص لكل خيط). .TP \fBM_ARENA_TEST\fP يُحدد هذا المعامل قيمة، بعدد الساحات المنشأة، عندها سيتم فحص تكوين النظام لتحديد حد صارم على عدد الساحات المنشأة. (انظر \fBM_ARENA_MAX\fP لتعريف الساحة.) .IP حساب الحد الصارم للساحة هو محدد بالتطبيق وعادةً يُحسب كمضاعف لعدد وحدات المعالجة المركزية المتاحة. بمجرد حساب الحد الصارم، تكون النتيجة نهائية وتُقيد العدد الإجمالي للساحات. .IP القيمة المبدئية لمعامل \fBM_ARENA_TEST\fP هي 2 على الأنظمة حيث \fIsizeof(long)\fP هو 4؛ وإلا فإن القيمة المبدئية هي 8. .IP هذا المعامل متاح منذ glibc 2.10 عبر \fB\-\-enable\-experimental\-malloc\fP، ومنذ glibc 2.15 بشكل مبدئي. .IP قيمة \fBM_ARENA_TEST\fP لا تُستخدم عندما يكون لـ \fBM_ARENA_MAX\fP قيمة غير صفرية. .TP \fBM_CHECK_ACTION\fP يُتحكم في إعداد هذا المعامل في كيفية استجابة glibc عند اكتشاف أنواع مختلفة من أخطاء البرمجة (مثل تحرير نفس المؤشر مرتين). تُحدد البتات الثلاث الأقل أهمية (2 و 1 و 0) من القيمة المخصصة لهذا المعامل سلوك glibc، كما يلي: .RS .TP البت 0 إذا تم تعيين هذه البتة، فاطبع رسالة من سطر واحد على \fIstderr\fP تُقدم تفاصيل عن الخطأ. تبدأ الرسالة بالسلسلة "***\ glibc detected\ ***"، متبوعة باسم البرنامج، واسم دالة تخصيص الذاكرة التي اكتُشف فيها الخطأ، ووصفًا موجزًا للخطأ، وعنوان الذاكرة حيث اكتُشف الخطأ. .TP البت 1 إذا وُضعت هذه البتة، فبعد طباعة أي رسالة خطأ محددة بالبتة 0، يُنهى البرنامج باستدعاء \fBabort\fP(3). منذ glibc 2.4، إذا وُضعت البتة 0 أيضًا، فبين طباعة رسالة الخطأ والإنهاء، يطبع البرنامج أيضًا أثر استدعاءات على نمط \fBbacktrace\fP(3)، ويطبع تخطيط ذاكرة العملية بأسلوب \fI/proc/\fPpid\fI/maps\fP (انظر \fBproc\fP(5)). .TP البتة 2 (منذ glibc 2.4) لهذه البتة تأثير فقط إذا وُضعت البتة 0 أيضًا. إذا وُضعت هذه البتة، فتُبسّط رسالة السطر الواحد التي تصف الخطأ لتحتوي فقط على اسم الدالة التي اكتُشف فيها الخطأ ووصفًا موجزًا للخطأ. .RE .IP تُتجاهل البتات المتبقية في \fIالقيمة\fP. .IP بدمج التفاصيل أعلاه، تكون القيم الرقمية التالية ذات معنى لـ \fBM_CHECK_ACTION\fP: .RS 12 .TP \fB0\fP تجاهل حالات الخطأ؛ متابعة التنفيذ (مع نتائج غير محددة). .TP \fB1\fP طباعة رسالة خطأ مفصلة ومتابعة التنفيذ. .TP \fB2\fP إنهاء البرنامج. .TP \fB3\fP طباعة رسالة خطأ مفصلة، وأثر استدعاءات، وتخطيطات الذاكرة، وإنهاء البرنامج. .TP \fB5\fP طباعة رسالة خطأ بسيطة ومتابعة التنفيذ. .TP \fB7\fP طباعة رسالة خطأ بسيطة، وأثر استدعاءات، وتخطيطات الذاكرة، وإنهاء البرنامج. .RE .IP منذ glibc 2.3.4، القيمة المبدئية للمعامل \fBM_CHECK_ACTION\fP هي 3. في glibc 2.3.3 وما قبله، القيمة المبدئية هي 1. .IP قد يكون استخدام قيمة غير صفرية لـ \fBM_CHECK_ACTION\fP مفيدًا لأنه وإلا فقد يحدث تعطل بعد ذلك بكثير، ويكون من الصعب جدًا تتبع السبب الحقيقي للمشكلة. .TP \fBM_MMAP_MAX\fP .\" The following text adapted from comments in the glibc source: يحدد هذا المعامل العدد الأقصى لطلبات التخصيص التي يمكن خدمتها في وقت واحد باستخدام \fBmmap\fP(2). يوجد هذا المعامل لأن بعض الأنظمة لديها عدد محدود من الجداول الداخلية لاستخدام \fBmmap\fP(2)، وقد يؤدي استخدام أكثر من القليل منها إلى تدهور الأداء. .IP القيمة المبدئية هي 65,536، وهي قيمة ليس لها أهمية خاصة وتخدم فقط كإجراء وقائي. يؤدي تعيين هذا المعامل إلى 0 إلى تعطيل استخدام \fBmmap\fP(2) لخدمة طلبات التخصيص الكبيرة. .TP \fBM_MMAP_THRESHOLD\fP بالنسبة للتخصيصات الأكبر من أو المساوية للحد المحدد (بالبايت) بواسطة \fBM_MMAP_THRESHOLD\fP التي لا يمكن تلبيتها من القائمة الحرة، تستخدم دوال تخصيص الذاكرة \fBmmap\fP(2) بدلاً من زيادة فاصل البرنامج باستخدام \fBsbrk\fP(2). .IP تخصيص الذاكرة باستخدام \fBmmap\fP(2) له ميزة كبيرة وهي أن كتل الذاكرة المخصصة يمكن دائمًا إطلاقها بشكل مستقل إلى النظام. (على النقيض، لا يمكن تقليم الكومة إلا إذا تم تحرير الذاكرة في الطرف العلوي.) من ناحية أخرى، هناك بعض العيوب لاستخدام \fBmmap\fP(2): لا توضع المساحة غير المخصصة في القائمة الحرة لإعادة استخدامها في التخصيصات اللاحقة؛ قد تُهدر الذاكرة لأن تخصيصات \fBmmap\fP(2) يجب أن تكون محاذية للصفحات؛ ويجب على النواة أداء المهمة المكلفة لتصفير الذاكرة المخصصة عبر \fBmmap\fP(2). تؤدي موازنة هذه العوامل إلى إعداد مبدئي قدره 128*1024 للمعامل \fBM_MMAP_THRESHOLD\fP. .IP الحد الأدنى لهذا المعامل هو 0. الحد الأعلى هو \fBDEFAULT_MMAP_THRESHOLD_MAX\fP: 512*1024 على أنظمة 32 بت أو \fI4*1024*1024*sizeof(long)\fP على أنظمة 64 بت. .IP \fIملاحظة\fP: في الوقت الحالي، يستخدم glibc حد mmap ديناميكي مبدئيًا. القيمة المبدئية للحد هي 128*1024، ولكن عندما تُحرر كتل أكبر من الحد الحالي وأقل من أو تساوي \fBDEFAULT_MMAP_THRESHOLD_MAX\fP، يُضبط الحد لأعلى ليتوافق مع حجم الكتلة المحررة. عندما يكون تحديد حد mmap الديناميكي ساريًا، يُضبط حد تقليم الكومة ديناميكيًا أيضًا ليكون ضعف حد mmap الديناميكي. يُعطل الضبط الديناميكي لحد mmap إذا وُضع أي من المعاملات \fBM_TRIM_THRESHOLD\fP أو \fBM_TOP_PAD\fP أو \fBM_MMAP_THRESHOLD\fP أو \fBM_MMAP_MAX\fP. .TP \fBM_MXFAST\fP (منذ glibc 2.3) .\" The following text adapted from comments in the glibc sources: يُعيِّن الحد الأعلى لطلبات تخصيص الذاكرة التي تُلبى باستخدام "الصناديق السريعة". (وحدة قياس هذا المعامل هي البايت.) الصناديق السريعة هي مناطق تخزين تحتوي على كتل ذاكرة مُحررة من نفس الحجم دون دمج الكتل الحرة المجاورة. يمكن معالجة إعادة تخصيص كتل من نفس الحجم لاحقًا بسرعة كبيرة عن طريق التخصيص من الصندوق السريع، على الرغم من أن تجزئة الذاكرة والبصمة الكلية للذاكرة للبرنامج قد تزداد. .IP القيمة المبدئية لهذا المعامل هي \fI64*sizeof(size_t)/4\fP (أي 64 على معماريات 32 بت). نطاق هذا المعامل هو من 0 إلى \fI80*sizeof(size_t)/4\fP. تعطيل استخدام الصناديق السريعة يكون بضبط \fBM_MXFAST\fP إلى 0. .TP \fBM_PERTURB\fP (منذ glibc 2.4) إذا ضُبط هذا المعامل إلى قيمة غير صفرية، فإن بايتات الذاكرة المخصصة (بخلاف التخصيصات عبر \fBcalloc\fP(3)) تُهيأ إلى مكمل القيمة في البايت الأقل أهمية من \fIvalue\fP، وعندما تُحرر الذاكرة المخصصة باستخدام \fBfree\fP(3)، تُضبط البايتات المحررة إلى البايت الأقل أهمية من \fIvalue\fP. يمكن أن يكون هذا مفيدًا لاكتشاف الأخطاء حيث تعتمد البرامج بشكل غير صحيح على أن الذاكرة المخصصة قد هُيئت إلى الصفر، أو تعيد استخدام قيم في ذاكرة حُررت بالفعل. .IP القيمة المبدئية لهذا المعامل هي 0. .TP \fBM_TOP_PAD\fP يُعرِّف هذا المعامل مقدار الحشو الذي يُستخدم عند استدعاء \fBsbrk\fP(2) لتعديل فاصل البرنامج. (وحدة قياس هذا المعامل هي البايت.) لهذا المعامل تأثير في الظروف التالية: .RS .IP \[bu] 3 عند زيادة فاصل البرنامج، تُضاف بايتات \fBM_TOP_PAD\fP إلى طلب \fBsbrk\fP(2). .IP \[bu] عندما تُقلم الكومة نتيجة لاستدعاء \fBfree\fP(3) (انظر مناقشة \fBM_TRIM_THRESHOLD\fP)، يُحفظ هذا القدر من المساحة الحرة في أعلى الكومة. .RE .IP في كلتا الحالتين، يُقرَّب مقدار الحشو دائمًا إلى حد صفحة النظام. .IP تعديل \fBM_TOP_PAD\fP هو مقايضة بين زيادة عدد استدعاءات النظام (عند ضبط المعامل منخفضًا) وإهدار الذاكرة غير المستخدمة في أعلى الكومة (عند ضبط المعامل مرتفعًا). .IP .\" DEFAULT_TOP_PAD in glibc source القيمة المبدئية لهذا المعامل هي 128*1024. .TP \fBM_TRIM_THRESHOLD\fP عندما ينمو مقدار الذاكرة الحرة المتجاورة في أعلى الكومة بشكل كافٍ، يستخدم \fBfree\fP(3) \fBsbrk\fP(2) لتحرير هذه الذاكرة إلى النظام. (يمكن أن يكون هذا مفيدًا في البرامج التي تستمر في التنفيذ لفترة طويلة بعد تحرير كمية كبيرة من الذاكرة.) يُحدد معامل \fBM_TRIM_THRESHOLD\fP الحد الأدنى للحجم (بالبايت) الذي يجب أن تبلغه كتلة الذاكرة هذه قبل استخدام \fBsbrk\fP(2) لتقليم الكومة. .IP القيمة المبدئية لهذا المعامل هي 128*1024. ضبط \fBM_TRIM_THRESHOLD\fP إلى \-1 يُعطل التقليم تمامًا. .IP .\" تعديل \fBM_TRIM_THRESHOLD\fP هو مقايضة بين زيادة عدد استدعاءات النظام (عند ضبط المعامل منخفضًا) وإهدار الذاكرة غير المستخدمة في أعلى الكومة (عند ضبط المعامل مرتفعًا). .SS "متغيرات البيئة" يمكن تعريف عدد من متغيرات البيئة لتعديل بعض المعاملات نفسها التي يتحكم بها \fBmallopt\fP(). استخدام هذه المتغيرات له ميزة أن شفرة مصدر البرنامج لا تحتاج إلى تغيير. لكي تكون فعالة، يجب تعريف هذه المتغيرات قبل أول استدعاء لدالة تخصيص ذاكرة. (إذا ضُبطت المعاملات نفسها عبر \fBmallopt\fP()، فإن إعدادات \fBmallopt\fP() تأخذ الأولوية.) لأسباب أمنية، تُتجاهل هذه المتغيرات في برامج set\-user\-ID و set\-group\-ID. .P متغيرات البيئة هي كما يلي (لاحظ الشرطة السفلية الزائدة في نهاية اسم بعض المتغيرات): .TP \fBMALLOC_ARENA_MAX\fP تتحكم في نفس المعامل كدالة \fBmallopt\fP() \fBM_ARENA_MAX\fP. .TP \fBMALLOC_ARENA_TEST\fP تتحكم في نفس المعامل كدالة \fBmallopt\fP() \fBM_ARENA_TEST\fP. .TP \fBMALLOC_CHECK_\fP .\" On glibc 2.12/x86, a simple malloc()+free() loop is about 70% slower .\" when MALLOC_CHECK_ was set. يتحكم متغير البيئة هذا في نفس المعامل كدالة \fBmallopt\fP() \fBM_CHECK_ACTION\fP. إذا وُضع هذا المتغير بقيمة غير صفرية، فتُستخدم تطبيق خاص لدوال تخصيص الذاكرة. (يُحقق ذلك باستخدام ميزة \fBmalloc_hook\fP(3).) يُجري هذا التطبيق فحص أخطاء إضافيًا، لكنه أبطأ من المجموعة القياسية لدوال تخصيص الذاكرة. (لا يكتشف هذا التطبيق جميع الأخطاء المحتملة؛ قد تظل تسريبات الذاكرة تحدث.) .IP يجب أن تكون القيمة المُسندة لمتغير البيئة هذا رقمًا واحدًا، ومعناه كما هو موصوف لـ \fBM_CHECK_ACTION\fP. تُتجاهل أي محارف تتجاوز الرقم الأول. .IP لأسباب أمنية، يُعطّل تأثير \fBMALLOC_CHECK_\fP مبدئيًا لبرامج set\-user\-ID و set\-group\-ID. لكن، إذا وُجد الملف \fI/etc/suid\-debug\fP (محتوى الملف غير ذي صلة)، فإن \fBMALLOC_CHECK_\fP يكون له تأثير أيضًا لبرامج set\-user\-ID و set\-group\-ID. .TP \fBMALLOC_MMAP_MAX_\fP تتحكم في نفس المعامل كدالة \fBmallopt\fP() \fBM_MMAP_MAX\fP. .TP \fBMALLOC_MMAP_THRESHOLD_\fP تتحكم في نفس المعامل كدالة \fBmallopt\fP() \fBM_MMAP_THRESHOLD\fP. .TP \fBMALLOC_PERTURB_\fP تتحكم في نفس المعامل كدالة \fBmallopt\fP() \fBM_PERTURB\fP. .TP \fBMALLOC_TRIM_THRESHOLD_\fP تتحكم في نفس المعامل كدالة \fBmallopt\fP() \fBM_TRIM_THRESHOLD\fP. .TP \fBMALLOC_TOP_PAD_\fP تتحكم في نفس المعامل كدالة \fBmallopt\fP() \fBM_TOP_PAD\fP. .SH "قيمة الإرجاع" عند النجاح، تُرجع \fBmallopt\fP() 1. عند الخطأ، تُرجع 0. .SH الأخطاء عند الخطأ، لا يُوضع \fIerrno\fP. .SH الإصدارات توجد دالة مماثلة في العديد من مشتقات System V، لكن نطاق القيم للمعامل \fIparam\fP يختلف عبر الأنظمة. عرّف SVID الخيارات \fBM_MXFAST\fP و\fBM_NLBLKS\fP و\fBM_GRAIN\fP و\fBM_KEEP\fP، لكن أول هذه الخيارات فقط هو المُنفَّذ في glibc. .SH المعايير لا شيء. .SH التاريخ glibc 2.0. .SH العلل تحديد قيمة غير صالحة للمعامل \fIparam\fP لا يُولّد خطأ. .P .\" FIXME . This looks buggy: .\" setting the M_MXFAST limit rounds up: (s + SIZE_SZ) & ~MALLOC_ALIGN_MASK) .\" malloc requests are rounded up: .\" (req) + SIZE_SZ + MALLOC_ALIGN_MASK) & ~MALLOC_ALIGN_MASK .\" https://www.sourceware.org/bugzilla/show_bug.cgi?id=12129 خطأ حسابي داخل تنفيذ glibc يعني أن استدعاءً بالشكل: .P .in +4n .EX mallopt(M_MXFAST, n) .EE .in .P .\" Bins are multiples of 2 * sizeof(size_t) + sizeof(size_t) لا يُؤدّي إلى استخدام fastbins لجميع التخصيصات ذات الحجم حتى \fIn\fP. لضمان النتائج المرغوبة، يجب تقريب \fIn\fP لأعلى إلى المضاعف التالي الأكبر من أو يساوي \fI(2k+1)*sizeof(size_t)\fP، حيث \fIk\fP عدد صحيح. .P .\" FIXME . https://www.sourceware.org/bugzilla/show_bug.cgi?id=12140 إذا استُخدم \fBmallopt\fP() لتعيين \fBM_PERTURB\fP، فكما هو متوقع، تُهيّأ بايتات الذاكرة المُخصّصة إلى مكمل البايت في \fIvalue\fP، وعند تحرير تلك الذاكرة، تُهيّأ بايتات المنطقة إلى البايت المُحدّد في \fIvalue\fP. لكن، يوجد خطأ بإزاحة \fIsizeof(size_t)\fP في التنفيذ: بدلاً من تهيئة كتلة الذاكرة المُحرَّرة بدقة بواسطة الاستدعاء \fIfree(p)\fP، تُهيّأ الكتلة التي تبدأ عند \fIp+sizeof(size_t)\fP. .SH أمثلة يُوضّح البرنامج أدناه استخدام \fBM_CHECK_ACTION\fP. إذا زُوّد البرنامج بمُعامل (عدد صحيح) من سطر الأوامر، فسيُستخدم ذلك المُعامل لتعيين معامل \fBM_CHECK_ACTION\fP. ثم يُخصّص البرنامج كتلة ذاكرة، ويُحرّرها مرتين (خطأ). .P يُظهر جلسة الصدفة التالية ما يحدث عند تشغيل هذا البرنامج تحت glibc، بالقيمة المبدئية لـ \fBM_CHECK_ACTION\fP: .P .in +4n .EX $\fB ./a.out\fP; main(): returned from first free() call *** glibc detected *** ./a.out: double free or corruption (top): 0x09d30008 *** ======= Backtrace: ========= /lib/libc.so.6(+0x6c501)[0x523501] /lib/libc.so.6(+0x6dd70)[0x524d70] /lib/libc.so.6(cfree+0x6d)[0x527e5d] \&./a.out[0x80485db] /lib/libc.so.6(__libc_start_main+0xe7)[0x4cdce7] \&./a.out[0x8048471] ======= Memory map: ======== 001e4000\-001fe000 r\-xp 00000000 08:06 1083555 /lib/libgcc_s.so.1 001fe000\-001ff000 r\-\-p 00019000 08:06 1083555 /lib/libgcc_s.so.1 [some lines omitted] b7814000\-b7817000 rw\-p 00000000 00:00 0 bff53000\-bff74000 rw\-p 00000000 00:00 0 [stack] Aborted (core dumped) .EE .in .P تُظهر التشغيلات التالية النتائج عند استخدام قيم أخرى لـ \fBM_CHECK_ACTION\fP: .P .in +4n .EX $\fB ./a.out 1\fP; # تشخيص الخطأ والاستمرار main(): returned from first free() call *** glibc detected *** ./a.out: double free or corruption (top): 0x09cbe008 *** main(): returned from second free() call $\fB ./a.out 2\fP; # إجهاض بدون رسالة خطأ main(): returned from first free() call Aborted (core dumped) $\fB ./a.out 0\fP; # تجاهل الخطأ والاستمرار main(): returned from first free() call main(): returned from second free() call .EE .in .P يُظهر التشغيل التالي كيفية تعيين نفس المعامل باستخدام متغير البيئة \fBMALLOC_CHECK_\fP: .P .in +4n .EX $\fB MALLOC_CHECK_=1 ./a.out\fP; main(): returned from first free() call *** glibc detected *** ./a.out: free(): invalid pointer: 0x092c2008 *** main(): returned from second free() call .EE .in .SS "مصدر البرنامج" .\" SRC BEGIN (mallopt.c) \& .EX #include #include #include \& int main(int argc, char *argv[]) { char *p; \& if (argc > 1) { if (mallopt(M_CHECK_ACTION, atoi(argv[1])) != 1) { fprintf(stderr, "mallopt() failed"); exit(EXIT_FAILURE); } } \& p = malloc(1000); if (p == NULL) { fprintf(stderr, "malloc() failed"); exit(EXIT_FAILURE); } \& free(p); printf("%s(): returned from first free() call\[rs]n", __func__); \& free(p); printf("%s(): returned from second free() call\[rs]n", __func__); \& exit(EXIT_SUCCESS); } .EE .\" SRC END .SH "انظر أيضًا" .ad l .nh \fBmmap\fP(2), \fBsbrk\fP(2), \fBmallinfo\fP(3), \fBmalloc\fP(3), \fBmalloc_hook\fP(3), \fBmalloc_info\fP(3), \fBmalloc_stats\fP(3), \fBmalloc_trim\fP(3), \fBmcheck\fP(3), \fBmtrace\fP(3), \fBposix_memalign\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 .