السلام عليكم ورحمة الله وبركاتة
هل المتغير String نوعه Reference في جميع اللغات ام فقط في منصة الدوت نت
ولماذا صار Reference هل هي غلطه
وهل هو عبارة عن مصفوفة من char
وشكرا جزيلآ لكم
ليست غلطة، الـ string مرجعية لأنها قد تكون كبيرة للغاية بالنسبة للـ stack، نعم في الذاكرة هي عبارة عن مصفوفة بايتات ككل شئ آخر.
في StringBuilder داخليا القيمة تخزن في مصفوفة char و هو أفضل لأن الـ string التقليدية غير قابلة للتغيير immutable أي كل مرة
تعدل عليها في الحقيقة أنت تنشئ string جديدة تماما في الـ heap.
لم افهم كيف ممكن تكون كبيرة بالنسبة للـ Stack
اتمنى ان تشرح لي ايضا كيف يكون شكل القيم في الذاكرة لم افهمها "نعم في الذاكرة هي عبارة عن مصفوفة بايتات ككل شئ آخر."
وشكرا جزيلآ لك
إفتراضيا في الدوت نت الـ stack حجمه 1mb يمكن أن تعدله في برنامج بتغيير الـ PE Header و يمكن أن تغيره فيـ Thread
بتمرير الحجم في المشيّد (constuctor) الخاص بها. لكن 1mb كافية و لا يجدر بك تغييرها إلا في حال أنك تعرف بالضبط ما تفعل.
الـ string يمكن أن تكون أكثر بكثير من 1mb و لهذا مكانها المناسب ليس على الـ stack.
و هذا كيف تبدو القيم في الذاكرة نظريا:
التعليقات