Skip to content

Latest commit

 

History

History
142 lines (102 loc) · 5.4 KB

readme.ar.md

File metadata and controls

142 lines (102 loc) · 5.4 KB

ExtendedMemory

[English]

توسعة لوحدة ذاكـرة ضمن مـتم.

إضافة المكتبة للمشروع

اشمل "مـحا"؛
مـحا.اشمل_ملف("Alusus/ExtendedMemory"، "تـوسعة_ذاكرة.أسس")؛
import "Apm";
Apm.importFile("Alusus/ExtendedMemory");

مثال

اشمل "مـتم/طـرفية"؛
اشمل "مـتم/ذاكـرة"؛
اشمل "مـحا"؛
مـحا.اشمل_ملف("Alusus/ExtendedMemory"، "توسيع_ذاكرة.أسس")؛
استخدم مـتم؛

// نفذ برنامجا مع ججز مسبق للذاكرة لتجنب ضريبة الأداء الناتجة عن الحجز المتكرر للذاكرة.
ذاكـرة.نفذ_مع_حجز_مسبق(4 * 1024 * 1024 /* 4 ميجابايت */، 4 * 1024 * 1024، 0، مغلفة () {
    // متن البرنامج هنا.
    ...
})؛
import "Srl/Console";
import "Srl/Memory";
import "Apm";
Apm.importFile("Alusus/ExtendedMemory");
use Srl;

// Execute a program with pre-allocated memory block to avoid the overhead of repetitive
// memory allocations.
Memory.runWithPreallocation(4 * 1024 * 1024 /* 4 MB */, 4 * 1024 * 1024, false, closure() {
    // Program body here.
    ...
});

الدالات

ابدأ_الحجز_المسبق (startPreallocation)

دالة ابدأ_الحجز_المسبق(الحجم: صـحيح_متكيف، مقدار_الزيادة: صـحيح_متكيف): مؤشر؛
func startPreallocation(size: ArchInt, enlargementSize: ArchInt): ptr;

هذه الدالة تحجز مساحة من الذاكرة مسبقًا لتُستخدم لتسريع عمليات حجز الذاكرة اللاحقة. بعد استدعاء هذه الدالة كل عملية ذاكـرة.احجز (Memory.alloc) ستحصل على مساحة ضمن هذه المساحة المحجوزة مسبقًا، وكل استدعاء لدالة ذاكـرة.حرر (Memory.free) لا يؤدي لأي تحرير للذاكرة، بدلًا من ذلك تُحرر كل الذاكرة مرة واحدة عند استدعاء دالة أنه_الحجز_المسبق (endPreallocation).

يجب الانتباه عند استخدام هذه الدالة أن أي عملية حجز تتم بعد استدعاء هذه الدالة ستُحرر تلقائيًا عند استدعاء أنه_الحجز_المسبق حتى لو لم تُستدعَ دالة حرر لتلك المساحة، لأن المساحة المحجوزة بدالة ابدأ_الحجز_المسبق تُحرر مرة واحدة، وهو ما يؤدي إلى تسريع الأداء. هذا يعني أن على المستخدم أن يكون حذرًا ويتجنب أي حجز لذاكرة ينوي استخدامها بعد استدعاء أنه_الحجز_المسبق.

كل استدعاء لهذه الدالة يجب أن يرافقه استدعاء لدالة أنه_الحجز_المسبق (endPreallocation). يمكن استدعاء هذه الدالة بشكل متداخل، أي استدعاء ابدأ_الحجز_المسبق مجددًا قبل استدعاء أنه_الحجز_المسبق.

المعطيات:

  • الحجم (size): حجم مساحة الذاكرة التي ستُحجز ابتداءًا.
  • مقدار_الزيادة (enlargementSize): حجم المساحة الإضافية التي ستُحجز أثناء استدعاء ذاكـرة.احجز كلما نفدت المساحة الحالية.

القيمة المرجعة: ترجع الدالة مؤشرًا بمثابة معرف لتمريره لاحقًا إلى دالة أنه_الحجز_المسبق.

أنه_الحجز_المسبق (endPreallocation)

دالة أنه_الحجز_المسبق(الكتلة: مؤشر)؛
دالة أنه_الحجز_المسبق(الكتلة: مؤشر, طباعة_ملاحظات: ثـنائي)؛
func endPreallocation(block: ptr);
func endPreallocation(block: ptr, printLog: Bool);

تنهي الحجز المسبق للاستدعاء المحدد لدالة ابدأ_الحجز_المسبق وتحرر كل الذاكرة التي حجزت ابتداءًا من ذلك الاستدعاء.

المعطيات:

  • الكتلة (block): المعرف المستلم من دالة ابدأ_الحجز_المسبق.
  • طباعة_ملاحظات (printLog): في حالة تمرير قيمة 1 إلى هذه الدالة تطبع الدالة ملاحظات حول عمليات الحجز التي تمت منذ آخر استدعاء لدالة ابدأ_حجز_الذاكرة. تفيد هذه المعلومات في معرفة ما إن كان في البرنامج تسريب في الذاكرة.

نفذ_مع_حجز_مسبق (runWithPreallocation)

دالة نفذ_مع_حجز_مسبق(
    الحجم: صـحيح_متكيف، مقدار_الزيادة: صـحيح_متكيف، طباعة_ملاحظات: ثـنائي، ما_سينفذ: مغلفة()
)؛
func runWithPreallocation(
    size: ArchInt, enlargementSize: ArchInt, printLog: Bool, toRun: closure()
);

هذه الدالة مجرد دالة مساعدة تستدعي تنفذ المغلفة المعطاة ضمن عملية حجز مسبق. راجع دالتي ابدأ_الحجز_المسبق و أنه_الحجز_المسبق لمعلومات حول معطيات هذه الدالة.