กลับไปหน้าบทความ

อ่าน 3 นาที

คนเก็บขยะโบห์ม

ตัวเก็บขยะ Boehm–Demers–Weiserซึ่งมักเรียกง่ายๆ ว่าBoehm GCหรือBoehm collectorเป็นตัวเก็บขยะแบบอนุรักษ์นิยม สำหรับCและC++ ที่พัฒนาโดย Hans Boehm, Alan Demers และMark Weiser

คนเก็บขยะโบห์ม

เครื่องเก็บขยะโบห์ม-เดเมอร์ส-ไวเซอร์
ชื่ออื่นๆบีดีดับเบิลยูจีซี
ผู้เขียนต้นฉบับฮันส์-เยอร์เกน โบห์ม
นักพัฒนาอีวาน ไมดันสกี และคณะ
ปล่อย1988 ( 1988 )
เวอร์ชันเสถียร
8.2.8 / 8 กันยายน 2024 ( 8 กันยายน 2024 )
เขียนเป็นซี
พิมพ์คนเก็บขยะ
ใบอนุญาตคล้ายกับX11 ( ซอฟต์แวร์ฟรี )
เว็บไซต์www.hboehm.info/gc/แก้ไขข้อมูลนี้ได้ที่วิกิดาต้า
ที่เก็บข้อมูล
  • github.com/bdwgc/bdwgc

ตัวเก็บขยะ Boehm–Demers–Weiserซึ่งมักเรียกง่ายๆ ว่าBoehm GCหรือBoehm collectorเป็นตัวเก็บขยะแบบอนุรักษ์นิยม สำหรับCและC++ [ 1 ]ที่พัฒนาโดย Hans Boehm, Alan Demers และMark Weiser [ 2 ] [ 3 ]

Boehm GC เป็นซอฟต์แวร์ฟรีที่เผยแพร่ภายใต้ใบอนุญาตซอฟต์แวร์ฟรีแบบอนุญาตคล้ายกับใบอนุญาต X11บทความแรกที่แนะนำตัวเก็บรวบรวมนี้ปรากฏในปี 1992 [ 4 ]

ออกแบบ

Hans Boehm อธิบายการทำงานของตัวเก็บรวบรวมดังนี้: [ 5 ]

ตัวเก็บรวบรวมหน่วยความจำใช้ขั้นตอนวิธีแบบมาร์ค-สวีป (mark-sweep algorithm) มันให้การเก็บรวบรวมแบบเพิ่มทีละส่วนและแบบรุ่นต่อรุ่นภายใต้ระบบปฏิบัติการที่รองรับหน่วยความจำเสมือนที่เหมาะสม (ปัจจุบันได้แก่ Linux, *BSD, Windows รุ่นล่าสุด, MacOS X, HP/UX, Solaris, Tru64, Irix และระบบปฏิบัติการอื่นๆ อีกเล็กน้อย โดยมีข้อจำกัดที่แตกต่างกันไป) มันอนุญาตให้เรียกใช้โค้ดการยุติการทำงานเมื่อมีการเก็บรวบรวมวัตถุ มันสามารถใช้ประโยชน์จากข้อมูลประเภทเพื่อค้นหาพอยเตอร์ได้หากมีการให้ข้อมูลดังกล่าว แต่โดยปกติแล้วจะใช้โดยไม่มีข้อมูลดังกล่าว

Boehm GC ยังสามารถทำงานในโหมดตรวจจับการรั่วไหล[ 6 ]ซึ่งการจัดการหน่วยความจำยังคงดำเนินการด้วยตนเอง แต่ Boehm GC สามารถตรวจสอบได้ว่าดำเนินการอย่างถูกต้องหรือไม่ ด้วยวิธีนี้โปรแกรมเมอร์สามารถค้นหาการรั่วไหลของหน่วยความจำและการจัดสรรซ้ำซ้อนได้

Boehm GC ยังมาพร้อมกับ ไลบรารี จัดการสตริงภาษา Cที่เรียกว่า cords ซึ่งคล้ายกับropesใน C++ ( โครงสร้างแบบต้นไม้ของอาร์เรย์ขนาดเล็กคงที่) แต่แทนที่จะใช้การนับการอ้างอิงเพื่อการปลดปล่อยหน่วยความจำอย่างถูกต้อง มันจะอาศัยการเก็บขยะเพื่อปลดปล่อยวัตถุ Cords มีความสามารถในการจัดการข้อความขนาดใหญ่ การแก้ไขข้อความระหว่างดำเนินการ การแบ่งส่วน การเชื่อมต่อ และการเก็บประวัติการเปลี่ยนแปลง ( ฟังก์ชัน ยกเลิก /ทำซ้ำ) ได้ดี

การดำเนินการ

ตัวเก็บขยะทำงานได้กับโปรแกรม C ส่วนใหญ่ที่ไม่ได้แก้ไข เพียงแค่แทนที่malloc()ด้วยGC_MALLOC()การเรียก แทนที่realloc()ด้วยGC_REALLOC()การเรียก และลบfree()การเรียก[ 1 ]คุณสมบัติการเก็บขยะสามารถเข้าถึงได้จากส่วนหัว<gc.h>โค้ดด้านล่างแสดงวิธีการใช้ Boehm แทนmalloc()และfree() แบบดั้งเดิม ในภาษา C [ 7 ]

#include <assert.h> #include <stdio.h> #include <stdlib.h> #include <gc.h>int main ( int argc , char * argv []) { const int SIZE = 10000000 ;GC_INIT (); สำหรับ( int i = 0 ; i < SIZE ; ++ i ) { int ** p = GC_MALLOC ( sizeof ( * p )); int * q = GC_MALLOC_ATOMIC ( sizeof ( * q ));assert ( * p == NULL ); * p = GC_REALLOC ( q , 2 * sizeof ( * p )); if ( i == SIZE - 1 ) { printf ( "ขนาดฮีป = %zu \n " , GC_get_heap_size ()); } }ส่งคืนค่า0 ; }

เพื่อความสมบูรณ์ Boehm สนับสนุนการยกเลิกการจัดสรรอย่างชัดเจนผ่านGC_FREE(). [ 8 ]การแทนที่ทั้งหมดสามารถทำได้โดยใช้มาโครพรีโปรเซสเซอร์

การใช้งานและพอร์ต

Boehm GC ถูกใช้โดยโครงการจำนวนมาก[ 9 ]ที่เขียนด้วยภาษา C หรือ C++ เช่นInkscapeรวมถึงสภาพแวดล้อมรันไทม์สำหรับภาษาอื่นๆ อีกหลายภาษา เช่นCrystal , คอมไพเลอร์ Python ประสิทธิภาพสูง Codon [ 10 ] สภาพแวดล้อมรันไทม์ GNU Compiler for Java , โครงการ Portable.NET , Embeddable Common Lisp , GNU Guile , การใช้งาน Monoของ แพลตฟอร์ม Microsoft .NET (ซึ่งใช้ GC แบบบีบอัดที่แม่นยำตั้งแต่เวอร์ชัน 2.8), GNUstep (เป็นตัวเลือก) และ libgc-d [ 11 ] (การเชื่อมต่อกับ libgc สำหรับภาษาการเขียนโปรแกรม Dซึ่งใช้เป็นหลักในMCI ) มันรองรับระบบปฏิบัติการ จำนวนมาก รวมถึง Unixหลายเวอร์ชัน (เช่นmacOS ) และMicrosoft Windows และมีคุณสมบัติขั้นสูงมากมาย เช่น การรวบรวมแบบเพิ่มทีละน้อย การรวบรวมแบบขนาน และ ความหมายของ ตัวจัดการขั้นสุดท้ายที่หลากหลาย

  • เว็บไซต์อย่างเป็นทางการแก้ไขข้อมูลนี้ได้ที่วิกิดาต้า
  • ที่เก็บ Git สำหรับการพัฒนา BoehmGCบนGitHub
  • ตัวจัดการขยะ BoehmบนSourceForge
  • การจัดการขยะแบบโปร่งใสที่ควบคุมโดยโปรแกรมเมอร์สำหรับ C++ โดย Hans-J. Boehm และ Michael Spertus
  • ดร. ด็อบส์ ตัวเก็บรวบรวมโบห์มสำหรับภาษา C และ C++, จีน ไมเคิล สโตเวอร์, 1 มีนาคม 2546
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Boehm_garbage_collector&oldid=1344933324 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ คนเก็บขยะโบห์ม

ตัวเก็บขยะ Boehm–Demers–Weiserซึ่งมักเรียกง่ายๆ ว่าBoehm GCหรือBoehm collectorเป็นตัวเก็บขยะแบบอนุรักษ์นิยม สำหรับCและC++ ที่พัฒนาโดย Hans Boehm, Alan Demers และMark Weiser

ออกแบบ

Hans Boehm อธิบายการทำงานของตัวเก็บรวบรวมดังนี้: [ 5 ]

การดำเนินการ

ตัวเก็บขยะทำงานได้กับโปรแกรม C ส่วนใหญ่ที่ไม่ได้แก้ไข เพียงแค่แทนที่ malloc() ด้วย GC_MALLOC() การเรียก แทนที่ realloc() ด้วย GC_REALLOC() การเรียก และลบ free() การเรียก [ 1 ] คุณสมบัติการเก็บขยะสามารถเข้าถึงได้จากส่วนหัว โค้ดด้านล่างแสดงวิธีการใช้ Boehm แทน...

การใช้งานและพอร์ต

Boehm GC ถูกใช้โดยโครงการจำนวนมาก [ 9 ] ที่เขียนด้วยภาษา C หรือ C++ เช่น Inkscape รวมถึงสภาพแวดล้อมรันไทม์สำหรับภาษาอื่นๆ อีกหลายภาษา เช่น Crystal , คอมไพเลอร์ Python ประสิทธิภาพสูง Codon [ 10 ] สภาพแวดล้อมรันไทม์ GNU Compiler for Java , โครงการ Portable.