อ่าน 3 นาที
คนเก็บขยะโบห์ม
ตัวเก็บขยะ Boehm–Demers–Weiserซึ่งมักเรียกง่ายๆ ว่าBoehm GCหรือBoehm collectorเป็นตัวเก็บขยะแบบอนุรักษ์นิยม สำหรับCและC++ ที่พัฒนาโดย Hans Boehm, Alan Demers และMark Weiser
คนเก็บขยะโบห์ม
| เครื่องเก็บขยะโบห์ม-เดเมอร์ส-ไวเซอร์ | |
|---|---|
| ชื่ออื่นๆ | บีดีดับเบิลยูจีซี |
| ผู้เขียนต้นฉบับ | ฮันส์-เยอร์เกน โบห์ม |
| นักพัฒนา | อีวาน ไมดันสกี และคณะ |
| ปล่อย | 1988 |
| เวอร์ชันเสถียร | 8.2.8 / 8 กันยายน 2024 |
| เขียนเป็น | ซี |
| พิมพ์ | คนเก็บขยะ |
| ใบอนุญาต | คล้ายกับX11 ( ซอฟต์แวร์ฟรี ) |
| เว็บไซต์ | www.hboehm.info/gc/ |
| ที่เก็บข้อมูล |
|
ตัวเก็บขยะ 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
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ คนเก็บขยะโบห์ม
ตัวเก็บขยะ 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.