في GO ، فإن السلوك مختلف بشكل مدهش. لا يولد المترجم أي أخطاء لإرجاع المؤشرات المخصصة للمكدس مثل المثال التالي:
حزمة الرئيسية يستورد ( "FMT" ) Func Main () { fmt.println (*(شيء ())) } func شيء () *سلسلة { S: = "A" العودة & s }بخلاف C ، فإن هذا الرمز في GO صالح تمامًا ولن ينتج أي أخطاء في وقت التشغيل. وذلك لأن GO يستخدم تقنية متطورة تُعرف باسم تحليل الهروب. إذا تم العثور على القيمة أو المؤشر للهروب ، فإن المترجم يضعها على الكومة التي تم جمعها القمامة بدلاً من المكدس. في هذه الحالة ، يهرب المؤشر الذي تم إرجاعه من نطاق وظيفة شيء () وبالتالي يتم وضعه على الكومة.
يشرح الأسئلة الشائعة في GO بإيجاز القاعدة المتعلقة بتخصيص الذاكرة: إذا كان المترجم لا يمكن أن يثبت أن المتغير لم يعد يشار إليه بعد عودة الوظيفة ، فإنه يوضح المتغير على السماوات إلى الوقاية من الأخطاء المتدنية. تلغي هذه الاستراتيجية الحاجة إلى إدارة الذاكرة اليدوية وتضمن أن البيانات المدببة تظل متاحة بعد إرجاع الوظيفة. سيوفر هذا الخيار نظرة ثاقبة على القرارات المتخذة فيما يتعلق بتخصيص كومة ومكدس.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3