C# has GC by default, but you can do manual memory management in "unsafe" blocks
- value types
- stackalloc is safe since C# 7
- SafeHandles since C# 2.0
- IDispose interface
- IDispose like Dispose() since C# 8
- Marshal class since C# 1.0
- Span<>() classes since C# 7
- static lambdas since C# 9
- native function pointers since C# 9