PDA

View Full Version : در مورد تخصیص حافظه برای اشیاء



Delphi-Man
جمعه 29 شهریور 1387, 09:37 صبح
با سلام
آیا اگر در کامپوننت Label 3 تا property جدید ایجاد کنم که از نوع TCaption باشن، این حافظه ها از رم گرفته میشه؟ اگه هر سه تا چیزی داخلشون نباشه چطور؟

Cave_Man
جمعه 29 شهریور 1387, 14:18 عصر
اگه چیزی هم داخلشون نباشه به هر حال با Create شدن Object فضا احتصاص داده میشه.
TCaption همون WideString هست و 4 بایت اشغال میکنه

Delphi-Man
سه شنبه 02 مهر 1387, 21:42 عصر
یه سوال دیگه ای برام پیش اومده. در مورد آرایه ها چطور؟ مثلا اگه 1000 تا string در نظر بگیریم، در هنگام اجرا حافظه اختصاص داده میشه؟

دنیای دلفی
سه شنبه 02 مهر 1387, 21:58 عصر
اگر هر WideString به ميزان 4 بايت از حافظه اشغال كنه با اين كار فكر كنم پشته رو پر مي كني ميشه 1000*4 بايت


String types
Type Maximum length Memory required Used for
ShortString 255 characters 2 to 256 bytes backward compatibility
AnsiString ~2^31 characters 4 bytes to 2GB 8-bit (ANSI) characters, DBCS ANSI, MBCS ANSI, etc.
WideString ~2^30 characters 4 bytes to 2GB Unicode characters; multi-user servers and multi-language applications

vcldeveloper
سه شنبه 02 مهر 1387, 23:11 عصر
بستگی به نوع آرایه داره، اگر Dynamic Array باشه، در زمان ساخت فقط 4 بایت حافظه اشغال میکنه، بعد از آن هم به اندازه جمع طول هر یک از عناصرش.

Delphi-Man
چهارشنبه 03 مهر 1387, 20:13 عصر
جناب کشاورز عزیز
اگه ممکنه یه کم در مورد Dynamic array توضیح بدهید.

shervin farzin
چهارشنبه 03 مهر 1387, 23:23 عصر
سلام
Dynamic Array ، نوعي از آرايه است كه در زمان اجراء برنامه اندازش مشخص ميشه و زمان
طراحي نيازي به مشخص كردن محدوده نداره . به عنوان مثال :

Tmp : Array of String ;
در اين كد من يك آرايه به صورت Dynamic اعلان كردم . كامپايلر با رسيدن به اين خط ، يك خونه
حافظه به قدر ذخيره كردن يك String تعريف ميكنه و حافظه بهش اختصاص مي ده .
حالا اگه من در ادامه برنامه بنويسم :

SetLength ( Tmp , 10 ) ;
كامپايلر با رسيدن به اين خط آرايه قبليم رو به طول 10 ميرسونه و به خونه هاي جديد آرايه
در همين لحظه حافظه تخصيص داده ميشه .
موفق باشيد .