مدیریت حافظه در دلفی
نمایش نتایج: از شماره 1 تا 1 , از مجموع 1

موضوع: مدیریت حافظه در دلفی

  1. Borna66_TAHA آواتار ها
    Borna66_TAHA
    مدیر سابق
    Feb 2009
    9,903
    390
    تشکر شده : 3,688

    Icon142 مدیریت حافظه در دلفی

    تخصیص خودکار حافظه
    وقتی شما از نوع‌های پایه (Integer ،real ،word و…) برای ایجاد متغییرهای خود استفاده می کنید، هیچ نگرانی درباره تخصیص حافظه آن وجود ندارد چون دلفی خودش آنرا تخصیص حافظه می کند و سپس آزاد میکند.

    کد:
    type
       TDay = (Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday)
    var
       Name  : String;                          {256 Bytes}
       X, Y  : Integer;                           {4 + 4 = 8 Bytes}
       List  : array [0..10] of Double;     {8 * 11 = 88 Bytes}
       Today : TDay;                            {1 Byte}


    دراین نمونه پس از پایان برنامه، تمام حافظه تخصیص داده شده فراخوانی و آزاد می شود.
    تخصیص حافظه دینامیکی
    در این حالت برنامه نویس احتیاج دارد تا انباره حافظه را شخصا” تخصیص و آزاد کند.
    نوع Pointer
    اشاره‌گرها در دلفی می‌توانند شکل‌های مختلفی را در برگیرد. نخست، نوع اشاره‌گری که یک آدرس حافظه را برای نوع ویژه‌ای از داده، همانند صحیح، رشته و غیره نگه میدارد (Typed Pointer).

    کد:
      
    var
    ;Number : ^Integer
    ;Name   : ^String
    کد:
    
    





    دوم، اشاره‌گرهای بدون نوع. اشاره‌گرهای بدون نوع (Untyped Pointers) خیلی به نوع معمولی خود شبیه هستند. اما محدودیت‌هایی مثل اینکه باید به نوع خاصی اشاره (Point) کند را ندارد.




    کد:
    var
    ;Something : Pointer


    حال اشاره‌گر بدون نوع ما می تواند به هر نوعی از داده اشاره کند. برای تخصیص حافظه آن، از کمپلکس بیش از یک بیت استفاده میکنیم. برای مثال برنامه زیر کامپایل می شود ولی در زمان اجرا حافظه‌ای تخصیص نمیشود.



    کد:
      
     begin   New(Something);   Dispose(Something);
    
    end;
    کد:
    
    




    برای تخصیص حافظه کامپایلر باید بداند که نوع داده ما برای تخصیص حافظه چیست:

    کد:
    type IntPtr = ^Integer; var Something : Pointer;begin Something := New(IntPtr); Integer(Something^) := 10; Dispose(Something);end ;
    تخصیص بلاکی از حافظه
    ما می‌توانیم از اشاره به بلاک‌هایی از تخصیص حافظه در سیستم استفاده کنیم. این کار را با رویه‌های
    GetMem و FreeMem برای تخصیص و آزاد سازی حافظه استفاده میکنیم.


    کد:
    var   Something : Pointerbegin   GetMem(Something, 100);   FreeMem(Something, 100);end;
    اشاره به حافظه از قبل تخصیص داده شده
    هر دو نوع اشاره‌گرها می توانند به هر جایی از حافظه اشاره بکنند. این بدان معناست که آنها می‌توانند اشاره به فضای اشغال شده با داده‌هایی که در حال حاضر موجودند داشته باشند. این نمونه اشاره‌گر احتیاجی به تخصیص حافظه ندارد.

    کد:
    var   Something : Pointer;   MyString  : PChar;        // type PChar = ^Char;                              begin   GetMem(Something, 100);   MyString := Something;   StrCopy(Something, 'Hello World');    FreeMem(Something, 100);end;
    حافظه Heap
    Heap شامل قسمتی از حافظه موجود در یک برنامه است که آنرا حافظه پویا می نامیم. Heap بخشی است که در آن تخصیص و تعریف حافظه به صورت تصادفی (Random) اتفاق می‌افتد. این به آن معناست که اگر شما سه بلاک از حافظه را به طور متوالی تخصیص دهید، می توانید بعد از هر دستور آنرا از بین ببرید. مدیر Heap جزئیات را برای شما نگهداری می کند. بنابراین شما به سادگی می توانید یک حافظه جدید را با GetMem و یا بوسیله صدا زدن constructor هنگام ساختن یک شی درخواست کنید و دلفی به شما یک بلاک جدید را برخواهد گرداند. Heap یکی از سه فضای موجود در برنامه کاربردی را استفاده کرده و دوتای دیگر به صورت فضای یکپارچه (Global) و پشته قرار می گیرند.
    حافظه Stack
    Stack شامل قسمتی از یک بخش از حافظه موجود یک برنامه است که دینامیکی است اما برای تخصیص و آزادسازی فرامین مخصوص دارد. تخصیص Stack به صورت LIFO می باشد. این بدان معناست که آخرین حافظه شیء شما تخصیص داه خواهد شد و سپس حذف می شود. حافظه پشته در روتین‌های نوعی استفاده می‌شود. وقتی شما یک روتین را صدا میزنید، پارامترهایش و روتین نوع آن در پشته ریخته می شود. همچنین پارامترهایی که در یک روتین تعریف میشوند، در پشته ذخیره میشوند و وقتی روتین خاتمه پیدا می کند تمام آنها به طور خودکار از بین می رود.

    فقط کاربران ثبت نام شده میتوانند لینک های انجمن را مشاهده کنند. ]
    هميشه خود باشيم نه كسي ديگر!
    فقط کاربران ثبت نام شده میتوانند لینک های انجمن را مشاهده کنند. ]
    فقط کاربران ثبت نام شده میتوانند لینک های انجمن را مشاهده کنند. ]
    #1 ارسال شده در تاريخ 7th April 2010 در ساعت 14:03

  2. 2 کاربر از این پست تشکر کرده اند :


موضوعات مشابه

  1. همه چیز در مورد حافظه رم و تست های آن
    توسط best123456789 در انجمن آرشیو بخش سخت افزار
    پاسخ ها: 4
    آخرين نوشته: 5th March 2010, 13:33
  2. معرفی رشته های دانشگاهی - مدیریت فناوری اطلاعات
    توسط faraz در انجمن معرفي رشته هاي دانشگاهي
    پاسخ ها: 1
    آخرين نوشته: 30th July 2009, 12:09
  3. آشنایی با حافظهram
    توسط secret در انجمن آرشیو بخش سخت افزار
    پاسخ ها: 0
    آخرين نوشته: 24th January 2009, 20:28
  4. معرفي حافظه Ram
    توسط secret در انجمن آرشیو بخش سخت افزار
    پاسخ ها: 0
    آخرين نوشته: 8th January 2009, 23:46
  5. مدیریت حافظه در دلفی
    توسط secret در انجمن Delphi دلفی
    پاسخ ها: 0
    آخرين نوشته: 30th December 2008, 00:28

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

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

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