ในความเห็นที่เป็นที่ยอมรับของฉันในเรื่องนี้ไม่มีข้อแก้ตัวสำหรับการรั่วไหลของร่างกายอย่างน้อยในห้องสมุดใด ๆ ที่มีจุดมุ่งหมายที่จะนำไปใช้อย่างกว้างขวาง ดังนั้นฉันจึงพยายามที่จะบั๊กนักพัฒนา GTK + จนกว่าพวกเขาจะแก้ไขด้วยตนเอง
มันเป็นเรื่องเล็กน้อยพอที่ห้องสมุดจะลงทะเบียนการatexit
เรียกกลับเพื่อเพิ่มหน่วยความจำใด ๆ ที่มันจัดสรรอย่างน้อยก็เมื่อถูกยกเลิกการโหลด หากต้องการหลีกเลี่ยงค่าใช้จ่ายในการจัดสรรเรือเล็ก ๆ ไม่ควรทำในตอนแรก
แม้แต่โปรแกรมที่ขี้เกียจที่สุดที่ต้องการจัดสรรปริมาณของหน่วยความจำเล็ก ๆ น้อย ๆ ในคราวเดียวก็สามารถใช้ตัวจัดสรรแบบเรียงลำดับแบบตรงไปตรงมาซึ่งเพิ่งล้างหน่วยความจำทั้งหมดเมื่อปิดเครื่อง หากตัวจัดสรรไม่ต้องการแม้แต่จะจัดการกับการจัดตำแหน่งก็สามารถรองทุกชิ้นเดียวมันพูลกับขอบเขตการจัดตำแหน่งสูงสุด หากสามารถได้รับประโยชน์จากเวลาที่ปิดเครื่องเร็วขึ้นโดยไม่ปล่อยหน่วยความจำเล็ก ๆ เหล่านั้นเป็นเอกเทศมันก็จะได้รับประโยชน์อย่างมากด้วยการแลกเปลี่ยนเพื่อความพยายามเล็กน้อยโดยใช้ตัวจัดสรรแบบลำดับซึ่งรวมหน่วยความจำแบบอนุกรมตามลำดับ การจัดสรรเร็วกว่ามากmalloc
และรูปแบบหน่วยความจำที่เป็นมิตรกับแคชมากขึ้นเท่านั้นที่จะมีบล็อกขนาดใหญ่ทั้งหมดของหน่วยความจำที่ต่อเนื่องซึ่งรวมกันโดยตัวจัดสรรให้อิสระเมื่อไลบรารีเสร็จสิ้น ไลบรารีทั้งหมดที่ต้องทำคือแทนที่malloc
สายที่พวกเขาไม่สนใจfree
ด้วยสิ่งที่ต้องการseq_malloc
และโทรseq_purge
ในatexit
callback เพื่อเพิ่มหน่วยความจำทั้งหมดที่จัดสรรเมื่อถูกยกเลิกการโหลด
มิฉะนั้นคุณจะได้ห้องสมุดที่น่ารังเกียจนี้ทำให้ข้อความในเครื่องมือตรวจจับการรั่วไหลของหน่วยความจำของคุณตอนนี้คุณต้องกรองออก หากคุณไม่ได้กรองพวกเขาอย่างเป็นระบบพวกเขาอาจบดบังการรั่วไหลในแอปพลิเคชันของคุณเองและเพื่อนร่วมงานของคุณอาจพัฒนาพฤติกรรมการมองเห็นพวกเขาลดประโยชน์ของเครื่องมือตรวจจับการรั่วไหลในตอนแรกเพื่อป้องกันทีมของคุณเอง ผลักดันรหัสรั่ว เป็นขั้นต้นและน่าเกลียดและที่สำคัญที่สุดฉันไม่พบข้อโต้แย้งในการทำสิ่งนี้อย่างจงใจเพื่อให้น่าสนใจในทุก ๆ ด้านว่าจะใช้วิธีแก้ปัญหาเล็กน้อยได้อย่างไร
การรั่วไหลแบบลอจิคัล (ชนิดที่ซับซ้อนกว่าที่แม้แต่การรวบรวมขยะไม่สามารถป้องกันได้) เป็นปัญหาที่ซับซ้อนมากขึ้นและที่นั่นฉันสามารถหาเหตุผลบางประการสำหรับโปรแกรมระยะสั้นที่จะมีการรั่วไหลแบบลอจิคัล การปิดระบบเนื่องจากต้องใช้ความคิดอย่างมากเกี่ยวกับการจัดการทรัพยากรเพื่อหลีกเลี่ยงการรั่วไหลแบบลอจิคัล (เนื้อหาเพิ่มเติมในภาษาที่มี GC) แต่ฉันไม่พบข้อแก้ตัวที่สมเหตุสมผลในการหลีกเลี่ยงการรั่วไหลของร่างกายเนื่องจากพวกเขาพยายามหลีกเลี่ยงแม้ในบริบทที่ขี้เกียจที่สุด
อย่างไรก็ตามอย่างน้อยที่สุดฉันก็จะกรองการรั่วไหลใน valgrind อย่างน้อยพวกเขาก็จะไม่ยุ่งกับความสามารถของทีมในการมองเห็นตัวคุณเอง