   deinit {
     /// Deallocate all memory.
     _totalBytesAllocated = 0
-    currentPtr = nil
-    endPtr = nil
+    current = nil
     while let slab = slabs.popLast() {
       slab.deallocate()
     }

  static private var SLAB_ALIGNMENT: Int = 8

  private var slabs: [Slab]
  /// Points to the next unused address in `slabs.last`.
  private var currentPtr: UnsafeMutableRawPointer?
  /// Points to the end address of `slabs.last`. If `slabs` is not empty, this
  /// is equivalent to `slabs.last!.baseAddress! + slabs.last!.count`
  private var endPtr: UnsafeMutableRawPointer?
  private var customSizeSlabs: [Slab]
  private var _totalBytesAllocated: Int

  public init() {
    slabs = []
    currentPtr = nil
    endPtr = nil
    customSizeSlabs = []
    _totalBytesAllocated = 0
  }

    _totalBytesAllocated += byteCount

    // Check if the current slab has enough space.
    if let allocated = allocateFromCurrentSlab(byteCount, alignment) {
      return allocated
    }

    // If the size is too big, allocate a dedicated slab for it.
