حسین احمدی
بنیانگذار توسینسو و برنامه نویس و توسعه دهنده ارشد وب

آموزش استفاده از حافظه Stack در سی شارپ بصورت مستقیم

یکی از قابلیت های زبان سی شارپ، تخصیص حافظه stack به صورت مستقیم برای متغیرهای محلی یا local variable ها است. برای اینکار می بایست از کلمه کلیدی stackalloc استفاده کرد. البته لازمه استفاده از این قابلیت استفاده از Pointer ها است. این قابلیت باعث می شود که متغیر ایجاد شده توسط GC مدیریت نشود. برای مثال، در کد زیر آرایه ای از نوع int ایجاد شده که به جای حافظه heap در حافظه stack ذخیره می شود:

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران
سرفصل های این مطلب
  1. کلمه کلیدی sizeof
unsafe
{
    int* numbers = stackalloc int[5];
}

در ادامه می توان با استفاده از قابلیت Pointer ها، به سادگی خانه های آرایه را مقدار دهی کرد و مقادیر آن را در خروجی چاپ کرد:

unsafe
{
    int* numbers = stackalloc int[5];

    *numbers = 12;
    numbers++;
    *numbers = 3;

    Console.WriteLine(*(numbers));
    Console.WriteLine(*(numbers - 1));
}

با اجرای کد بالا، مقادیر 12 و 3 به ترتیب در خروجی نمایش داده خواهند شد.

کلمه کلیدی sizeof

همانطور که می دانید، تمامی نوع های داده اولیه در زبان سی شارپ یک اندازه مشخص دارند، مانند int که 4 بایت است یا long که 8 بایت است. در سی شارپ، بوسیله کلمه کلیدی sizeof می توان اندازه ای که یک نوع داده حافظه اشغال می کند را بدست آورد. در کد زیر نحوه استفاده از این دستور توضیح داده شده است:

Console.WriteLine("Size of Int16 is: {0}", sizeof (short));
Console.WriteLine("Size of Int32 is: {0}", sizeof(int));
Console.WriteLine("Size of Int64 is: {0}", sizeof(long));
Console.WriteLine("Size of Decimal is: {0}", sizeof(decimal));

با اجرای کد بالا، به ترتیب مقادیر 2 و 4 و 8 و 16 که سایز نوع های داده short و int و long و decimal است در خروجی چاپ می شود. همچنین بوسیله این کلمه کلیدی می توان سایز یک struct را نیز بدست آورد. struct زیر را در نظر بگیرید:

unsafe
{
    Console.WriteLine(sizeof (Values));
}

دقت کنید که برای struct ها، تنها می توان در بلاک های unsafe از sizeof استفاده کرد.

نویسنده: حسین احمدی

منبع: ITPRO


حسین احمدی
حسین احمدی

بنیانگذار توسینسو و برنامه نویس و توسعه دهنده ارشد وب

حسین احمدی ، بنیانگذار TOSINSO ، توسعه دهنده وب و برنامه نویس ، بیش از 12 سال سابقه فعالیت حرفه ای در سطح کلان ، مشاور ، مدیر پروژه و مدرس نهادهای مالی و اعتباری ، تخصص در پلتفرم دات نت و زبان سی شارپ ، طراحی و توسعه وب ، امنیت نرم افزار ، تحلیل سیستم های اطلاعاتی و داده کاوی ...

نظرات