mark-sweep
Mesh
Our great sponsors
mark-sweep | Mesh | |
---|---|---|
11 | 6 | |
702 | 1,699 | |
- | 0.4% | |
10.0 | 3.7 | |
almost 4 years ago | 13 days ago | |
C | C++ | |
GNU General Public License v3.0 or later | Apache License 2.0 |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
mark-sweep
-
Let's Write a Malloc
Never forget:
https://journal.stuffwithstuff.com/2013/12/08/babys-first-ga...
> Let me stress here that while this collector is simple, it isn’t a toy.
> There are a ton of optimizations you can build on top of this—in GCs and programming languages, optimization is 90% of the effort—but the core code here is a legitimate real GC.
> It’s very similar to the collectors that were in Ruby and Lua until recently.
> You can ship production code that uses something exactly like this.
> Now go build something awesome!
-
loxcraft: a compiler, language server, and online playground for the Lox programming language
Bob Nystrom also has a blog, and his articles are really well written (see his post on Pratt parsers / garbage collectors). I'd also recommend going through the source code for Wren, it shares a lot of code with Lox. Despite the deceptive simplicity of the implementation, it (like Lox) is incredibly fast - it's a great way to learn how to build production grade compilers in general.
-
The Garbage Collection Handbook, 2nd Edition
Bob Nystrom (of Game Programming Patterns, Crafting Interpreters, and dartfmt fame) also wrote a tutorial[1], of a precise as opposed to a conservative garbage collector.
Regarding register scanning, Andreas Kling has made (or at least quoted) an amusing observation[2] that your C runtime already has a primitive to dump all callee-save registers onto the stack: setjmp(). So all you have to do to scan registers is to put a jmp_buf onto the stack, setjmp() to it, then scan the stack normally starting from its address.
[1] https://journal.stuffwithstuff.com/2013/12/08/babys-first-ga...
- Ask HN: Do you recall any book or course that made a topic finally click?
-
Garbage Collection with LLVM
Might not be that hard: https://journal.stuffwithstuff.com/2013/12/08/babys-first-garbage-collector/
- Baby’s First Garbage Collector (2013)
-
Reference Count, Don't Garbage Collect
To better understand garbage collection, nothing better than implementation. This article is such a joy to read:
https://journal.stuffwithstuff.com/2013/12/08/babys-first-ga...
Mesh
-
Spotting and Avoiding Heap Fragmentation in Rust Apps
I'm not sure if it's widely used, but Mesh is a C/C++ library that can recover from memory fragmentation. The YouTube video in the README is a great watch.
-
Compacting the Uncompactable: The Mesh Compacting Memory Allocator
From 2019. Here it is on Github: https://github.com/plasma-umass/Mesh
-
Bizarre memory leak caused by tokio runtime
With everyone talking about memory fragmentation, I'd like to mention Mesh, an allocator that can compact aka defrag the heap without any help from the program or compiler. Here's the talk explaining it, "Compacting the Uncompactable" by Bobby Powers.
- Reference Count, Don't Garbage Collect
-
How do applications request for RAM from the CPU?
Mesh by Bobby Powers
What are some alternatives?
mmtk-core - Memory Management ToolKit
jemalloc
c-examples - Example C code
mimalloc - mimalloc is a compact general purpose allocator with excellent performance.
zig.vim - Vim configuration for Zig
snmalloc - Message passing based allocator
git-from-the-bottom-up - An introduction to the architecture and design of the Git content manager
memory - STL compatible C++ memory allocator library using a new RawAllocator concept that is similar to an Allocator but easier to use and write.
ixy-languages - A high-speed network driver written in C, Rust, C++, Go, C#, Java, OCaml, Haskell, Swift, Javascript, and Python
rust-gc - Simple tracing (mark and sweep) garbage collector for Rust
gperftools - Main gperftools repository