نمایش نتایج: از شماره 1 تا 1 از مجموع 1
Like Tree1نفر پسندیدند
  • 1 ارسال توسط returnx

موضوع: Slack Bytes چیست!؟

  1. #1
    Moderator
    تاریخ عضویت
    2012 November
    ارسال ها
    128
    تشکر
    28
    تشکر شده 173 بار در 77 پست


    آيا اين پست براي شما سودمند بود؟ بله | خیر

    Slack Bytes چیست!؟

    تو این آموزش می خوایم یک گریزی به معماری کامپیوتر و برنامه نویسی داشته باشیم و ببنیم تو ذخیره سازی داده ها در Ram چه اتفاقاتی میفته!؟ (البته خیلی وقت نیست من خودم با این داستان آشنا شدم برای همین گفتم شاید برای شما هم جالب باشه)

    فرض کنید ما Structure زیر را تعریف می کنیم :
    کد:
    struct f_student_strcut
    {
        char a;//it takes 8 byte
        char b;
        char c;
        char d;
        int e;
    };
    حالا وقتی ما از این structure یک نمونه ایجاد کنیم و با دستور Sizeof بخوایم اندازه این structure بدست بیاریم انتظار داریم که به ما 8 را برگردونه ، به این دلیل که هر کارکتر 1 بایت فضا اشغال میکنه و نوع int 4 بایت که مجوعا چهار کارکتر داریم و 1 نوع int که میشه 8 بایت ، وقتی از دستور زیر استفاده می کنیم :
    کد:
        //init First structure:
        f_student_strcut f_test;
        cout << sizeof(f_test) << endl;
    برنامه مطابق انتظار به ما 8 را بر میگردونه و چیز عجیبی نمیبینیم!

    حالا بزارید یک structure جدید تعریف کنیم ، این بار به این شکل :
    کد:
    struct s_student_struct
    {
        char a;
        int b;
        char c;
    };
    حالا دوباره یک نمونه از این structure ایجاد میکنیم و با دستور Sizeof اندازه این structure را به دست میاریم :
    کد:
        //init Seconde Structure:
        s_student_struct s_test;
        cout << sizeof(s_test) << endl;
    ما انتظار داریم برنامه به ما 6 را نشان بده ، اما برخلاف انتظار ما عدد 12 را نشان میده !! آیا ما اشتباه کردیم !؟ یا کامپایلر !؟ هیچکدام ، پس چه اتفاقی افتاد !؟
    در معماری کامپیوتر خوانده بودیم هر معماری کامپیوتر برای ذخیره داده ها روی رم از واحد خاصی از اندازه استفاده میکنه که ما به این واحد گفته بودیم Word (کلمه) ، وقتی Structure به شکل اول تعریف میکنیم کامپیوتری که هر کلمه اش 4 بایت هست برای ذخیره سازی مشکلی نداره ؛ و اونها رو به شکل زیر روی رم مینویسه :
    struct_1.png
    اما در structure برای اینکه کامپیوتر زمان خواندن دچار مشکل نشه و مرز بین داده ها را بتونه پیدا کنه چند بایت را خالی می گذاره تا به کلمه ی بعدی رفته و
    نوع بعدی که نیاز به 4 بایت داره را در کلمه ی بعدی رم مینویسه تا مطمئن شه ، در زمان خواندن دچار مشکل نخواهد شد یعنی میتونیم شکل زیر را فرض کنیم :


    struct_2.png


    به این کار در علم معماری کامپیوتر padding (حتما با این اصطلاح آشنا هستید) گفته می شود تا مطمئن شویم در زمان خواندن با هیچ مشکلی روبرو نخواهیم شد و به اون فضا های خالی و بی کاربرد Slack Bytes گفته میشه ،
    البته میشه به کامپایلر اعلان کرد که این فضا های خالی را در نظر نگیره و داده ها را عینا پشت سرهم بنویسه (البته من خودم هنوز با کامپایلر msvc موفق به اینکار نشدم) ، بدیهی عواقب این کار به عهده ی خود برنامه نویس هست..


    نکته : کد های بالا ، با کامپایلر msvc برای زبان C++ تست شده ، از اونجایی که بیشتر مخاطبین این سایت از زبان C# استفاده می کنن ، برای تست از اونجایی که
    Structure ها در دات نت نوع های unmanaged خوانده میشه برای بدست آوردن Sizeof نمیتونید از Sizeof معمولی در C# استفاده کنید ، برای اینکار از متد Sizeof که در کلاس Marshal قرار دارد استفاده کنید ، کلاس Marshal در فضای نام System.Runtime.InteropServices قرار دارد ، برای استفاده هم به این شکل میتونید استفاده کنید :

                is_test i_test=new is_test();
    MessageBox.Show(Marshal.SizeOf(i_test).ToString());




    موضوعات مشابه:
    ویرایش توسط returnx : 2nd January 2014 در ساعت 02:39 PM
    smm.azizi این نویسه را میپسندد.

 

 

کاربران برچسب خورده در این موضوع

کلمات کلیدی این موضوع

علاقه مندی ها (Bookmarks)

علاقه مندی ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •  


Powered by vBulletin
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.6.0
Persian Language By Ustmb.ir
این انجمن کاملا مستقل بوده و هیچ ارتباطی با دانشگاه علوم و فنون مازندران و مسئولان آن ندارد..این انجمن و تمامی محتوای تولید شده در آن توسط دانشجویان فعلی و فارغ التحصیل ادوار گذشته این دانشگاه برای استفاده دانشجویان جدید این دانشگاه و جامعه دانشگاهی کشور فراهم شده است.لطفا برای اطلاعات بیشتر در رابطه با ماهیت انجمن با مدیریت انجمن ارتباط برقرار کنید
ساعت 03:11 PM بر حسب GMT +4.5 می باشد.