stackalloc (مرجع #C)
تُستخدم الكلمة الأساسية stackalloc في سياق التعليمات البرمجية الغير آمنة لتخصيص قطعة من الذاكرة في المكدس.
int* fib = stackalloc int[100];
ملاحظات
يخرج المثال التالي سلسلة فيبوناشي (fibonacci) حتى 100 رقم وكل رقم عبارة عن مجموع الرقمين السابقين. في التعليمات البرمجية يتم حجز قطعة من الذاكرة كافية الحجم لتحتوي على 100 عنصر من نوع int في المكدس وليس في كومة الذاكرة المؤقتة. يتم تخزين عنوان القطعة في المؤشر fib. هذه الذاكرة غير خاضعة لتجميع البيانات المهملة وبالتالي لا يجب أن تكون مُثبّته (باستخدام fixed). تقتصر مدة بقاء قطعة الذاكرة على مدة بقاء الأسلوب الذي يعرفها. لا يمكنك تحرير الذاكرة قبل الرجوع من الأسلوب.
تكون stackalloc صالحة فقط في مُهيآت المتغيرات المحلية.
لأنه يتم تضمين أنواع المؤشر تتطلب stackalloc سياق غير آمن. لمزيد من المعلومات، راجع التعليمات البرمجية الغير آمنة والمؤشرات (دليل البرمجة لـ #C).
stackalloc تشبه _alloca في مكتبة وقت تشغيل C.
الأمان
التعليمات البرمجية الغير آمنة أقل أماناً من البدائل الآمنة. على الرغم من ذلك، استخدام stackalloc يفعّل ميزات كشف عن مشكلات تجاوز المجال في وقت تشغيل اللغة العامة (CLR) تلقائياً. إذا تم الكشف عن مشكلة تجاوز المجال يتم إنهاء العملية بأقصى سرعة ممكنة لتقليل فرصة تنفيذ التعليمات البرمجية الضارة.
مثال
class Test
{
static unsafe void Main()
{
const int arraySize = 20;
int* fib = stackalloc int[arraySize];
int* p = fib;
*p++ = 1;
for (int i = 2; i < arraySize; ++i, ++p)
{
// Sum the previous two numbers.
*p = p[-1] + p[-2];
}
for (int i = 0; i < arraySize - 1; ++i)
{
Console.WriteLine(fib[i]);
}
// Keep the console window open in debug mode.
System.Console.WriteLine("Press any key to exit.");
System.Console.ReadKey();
}
}
/*
Output
1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
*/
مواصفات لغة #C
لمزيد من المعلومات، راجع مواصفات لغة #C. مواصفات اللغة هي المصدر النهائي لبناء جملة C# واستخدامها.
راجع أيضًا:
المرجع
الكلمات الأساسية لعوامل التشغيل (مرجع #C)
التعليمات البرمجية الغير آمنة والمؤشرات (دليل البرمجة لـ #C)