jmp Ring_ZerO

; go to ring zero
نوشته شخصی و فنی

jmp Ring_ZerO

نوشته شخصی و فنی

۱ مطلب با موضوع «Programming :: Delphi» ثبت شده است

  • ۱
  • ۰

MemoryLeak چیست؟

 سلام به دوستان عزیز.

نیت کرده بودم پست ی در مورد Memory Leak بنویسم و در این پست بیشتر باابن باگ آشنا میشیم و حرف میزنیم و کدها بصورت Native code و دلفی هستش (بخش اول) که بعدا سراغ managed code ها هم میریم (بخش دوم).

وقتی که یک برنامه فضایی از حافظه رو در اختیار میگیره و به خودش اختصاص میده، مثلا ساخت یک نمونه از کلاس ها و ... اگر نتونه اون فضای اختصاص یافته رو آزاد کنه این باگ اتفاق میافته که ممکن است با اجرای زیاد برنامه فضای زیادی از حافظه اشغال شده و ازاد نشه و با کمبود حافظه مواجه بشیم.  این باگ توسط برنامه نویس قابل رفع هست. نمونه خیلی ساده که بگم نوشتن برنامه multi-thread اگر به درستی نتونید ترید های ساخته شده رو free کنید حافظه بیخود اشغال میشه.

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

بزارین با یک سورس کد بهتر متوجه بشیم که چگونه این باگ اتفاق میافته، در زیر یک سورس ساده از دلفی هست

procedure PrintFile(const fileName : string);
 var
   myFile   : TextFile;
   fileData : TStringList;
   i        : Integer;
 
 begin
   // Create the TSTringList object
   fileData := TStringList.Create;      // This allocates object memory
 
   // Load the file contents into the string list
   fileData.LoadFromFile(fileName);     // Expands the object memory size
 
   // Open a printer file
   AssignPrn(myFile);
 
   // Now prepare to write to the printer
   ReWrite(myFile);
 
   // Write the lines of the file to the printer
   for i := 0 to fileData.Count-1 do
     WriteLn(myFile, fileData[i]);
 
   // Close the print file
   CloseFile(myFile);
 end;

به نظرتون باگ memory leak کجا داره اتفاق میافته؟