         let convertedPtr: UnsafePointer<Int> = reinterpretCast(ptr.address)
         var length = Int(malloc_size(convertedPtr))
         let isMalloc = length > 0
+        let isSymbol = ptr.symbolName() != nil
+        
+        if isSymbol {
+            if let nextSymbol = ptr.nextSymbol(4096) {
+                length = nextSymbol - ptr
+            }
+        }
+        
         if length == 0 && !knownSize {
             var result = [UInt8]()
             while (result.count < 128) {


func +(a: Pointer, b: Int) -> Pointer {
    return Pointer(address: a.address + UInt(b))
}

struct Memory {

        }
        return nil
    }
    
    func nextSymbol(limit: Int) -> Pointer? {
        if let myInfo = symbolInfo() {
            for i in 1..<limit {
                let candidate = self + i
                let candidateInfo = candidate.symbolInfo()
                if !candidateInfo {
                    return nil
                }
                if myInfo.dli_sname != candidateInfo!.dli_sname {
                    return candidate
                }
            }
        }
        return nil;
    }
}

func ==(a: Pointer, b: Pointer) -> Bool {
