فهم تسرب الذاكرة في شريحة Go
شريحة من المؤشرات إلى الأعداد الصحيحة ([]*int):IT:
s = s [: 1] يصبح الطول 1 ، لكن صفيف الدعم يبقى دون أن يمس. لا يزال المؤشر غير المستخدم في العنصر الثاني في الذاكرة كجزء من الصفيف. نظرًا لعدم الإشارة إليها من خلال أي شريحة ، يصبح من الممكن الوصول إليه ولا يمكن تحريره بواسطة جامع القمامة ، مما يؤدي إلى تسرب ذاكرة.
2}
s := []*int{new(int), new(int)}
سلسلة العنوان سلسلة المؤلف } ... var bkslice = [] books {book1 ، book2} bkslice = bkslice [: 1]
على الرغم من أن الشريحة تحتفظ فقط بالكتاب 1 ، فإن سلاسل المؤلف واللقب من Book2 لا تزال في الذاكرة كجزء من المصفوفة. لمنع ذلك ، قم بتعيين قيمة الصفر إلى Book2 قبل التقطيع:
s = s[:1]bkslice [1] = Book {} bkslice = bkslice [: 1]
هذا يزيل الإشارة إلى الأوتار في Book2 ، مما يسمح لهم بالجملة. على سبيل المثال ، يجب أن يتم صفر بنية ذات حقول هي مؤشرات أو شرائح أو هياكل بيانات معقدة أخرى قبل التوجه إلى قطع المراجع الخارجية.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3