ورود

View Full Version : Variable Length String



IamOverlord
جمعه 24 شهریور 1391, 16:48 عصر
سلام دوستان.
برای پیاده سازی رشته هایی با طول متغیر باید چی کار کرد؟
یعنی با افزایش طول، رشته ها با هم تداخل پیدا نکنن؟
یه چیزایی در مورد حافظه ی Heap شنیدم. این نوع رشته ها رو باید تو حافظه ی Heap تعریف کرد؟
اگه نکته یا مطلب به درد بخوری هست بگید...

Ananas
جمعه 24 شهریور 1391, 19:06 عصر
سلام.
کلاس string هست. ازش استفاده کنید. wstring هم برای رشته با کاراکتر 16 بیتی استفاده میشه. تو iostream.

IamOverlord
جمعه 24 شهریور 1391, 19:21 عصر
سلام دوست عزیز...
در اصل من می خوام بدونم چه طور می تونم این کار رو خودم بکنم... چون می خوام تو Assembly این کار رو انجام بدم... همون کلاس String، رشته ها رو کجای حافظه تعریف می کنه؟

#target
جمعه 24 شهریور 1391, 21:59 عصر
شما میتونین خودتون حافظه تخصیص بدین و نقل و انتقالات رو با اسمبلی انجام بدین
برای تخصیص قطعات کوچک از Heap با تابع HeapAlloc
و برای قطعات بزرگ از VirtualAlloc که صفحات حافظه رو برا استفاده خودت تخصیص میدی . این تابع چون صفحه تخصیص میده در اکثر سیستم ها بطور بخشهای 4 کیلوبایتی هست

IamOverlord
جمعه 24 شهریور 1391, 23:54 عصر
یه سوال دیگه ای هم برام پیش اومده...
این که وقتی حافظه تخصیص می دیم از کجا معلوم که این رشته ها به هم برخورد نکنن؟ منظورم اینه که ممکنه یه رشته ای بیش از ۱۰۰ کاراکتر بتونه به درستی رشد کنه، ولی یه رشته ای بعد ۱۰ کاراکتر با یه رشته ی دیگه تداخل پیدا کنه... قضیه چیه؟

Ananas
شنبه 25 شهریور 1391, 01:33 صبح
شما یه حافظه به مقدار عدد ثابتی که توانی از دو باشه (مثلا MAX_SIZE) از سیستم میگیرید بعد هر جا خواستید طول رشته زیاد بشه میسنجید اگه از این مقدار (MAX_SIZE) بیشتر بود حافظه رو reallocate میکنید اندازه ی ضریبی از MAX_SIZE و این تابع خودش حافظه ی جدید میگیره (ممکنه جای دیگه) و اطلاعات قبلی رو توش کپی میکنه. مقدار حافظه هم داخل کلاس به شکل اطلاعات محرمانه ذخیره میشه و قسمت های دیگه ی برنامه معمولا به اشاره گری به ابتدای رشته و سایز خود رشته (که ممکنه کمتر از سایز اصلی گرفته شده باشه) و .. احتیاج دارن که به شکل تابع براش تعریف میکنید.

IamOverlord
یک شنبه 26 شهریور 1391, 23:19 عصر
non-growable با growable چه فرقی داره؟ کاربردشون چیه؟

#target
یک شنبه 26 شهریور 1391, 23:55 عصر
منم ی همچین چیزی گفتم دیگه !!!

صفحات حافظه رو برا استفاده خودت تخصیص میدی
البته در مورد حافظه Heap قابل گسترش درست میگی . من بیشتر هدفم رو همون Heap پیشفرض پروسه بود


non-growable با growable چه فرقی داره؟ کاربردشون چیه؟
در زمان ایجاد Heap پارامتر سوم HeapCreate رو صفر بذاری سایز در صورت تخصیص گسترش پیدا میکنه (تخصیص حافظه در نهایت با همون VirtualAlloc هست )