Skip to content

Instantly share code, notes, and snippets.

@omochi
Created January 21, 2017 13:44
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save omochi/b67262b8682015e925ac7ce0f267c18f to your computer and use it in GitHub Desktop.
Save omochi/b67262b8682015e925ac7ce0f267c18f to your computer and use it in GitHub Desktop.
import Foundation
func dumpMemory(_ p: UnsafeRawPointer, _ size: Int) {
let addr = unsafeBitCast(p, to: UInt64.self)
var p = p.bindMemory(to: UInt8.self, capacity: size)
for i in 0..<size {
if i % 8 == 0 {
if i != 0 {
print()
}
print(String(format: "[0x%016lx]", addr + UInt64(i)), terminator: "")
}
print(String(format: " %02x", p[i]), terminator: "")
}
print()
}
struct SA {
var v1: UInt32 = 0xA1B1C1D1
var v2: UInt32 = 0xA2B2C2D2
var v3: UInt32 = 0xA3B3C3D3
var v4: UInt32 = 0xA4B4C4D4
}
class CA {
var v1: UInt32 = 0xA1B1C1D1
var v2: UInt32 = 0xA2B2C2D2
var v3: UInt32 = 0xA3B3C3D3
var v4: UInt32 = 0xA4B4C4D4
}
func test1() {
print("--test1 enter")
var x = SA()
let p = UnsafeRawPointer(UnsafeMutablePointer<SA>(&x))
dumpMemory(p, MemoryLayout<SA>.size)
print("--test1 exit")
}
func test2() {
print("--test2 enter")
var x = CA()
let p = UnsafeRawPointer(UnsafeMutablePointer<CA>(&x))
dumpMemory(p, MemoryLayout<CA>.size)
print("--")
let p2 = p.bindMemory(to: UnsafeRawPointer.self, capacity: 1).pointee
dumpMemory(p2, 32)
print("--")
var x2 = x
dumpMemory(p2, 32)
print("--")
weak var x3 = x
dumpMemory(p2, 32)
print("--test2 exit")
}
func test3() {
print("--test3 enter")
var x1: SA? = .some(SA())
let px1 = UnsafeRawPointer(UnsafeMutablePointer<SA?>(&x1))
dumpMemory(px1, MemoryLayout<SA?>.size)
var x2: SA? = .none
let px2 = UnsafeRawPointer(UnsafeMutablePointer<SA?>(&x2))
dumpMemory(px2, MemoryLayout<SA?>.size)
print("--test3 exit")
}
func test4() {
print("--test4 enter")
var x1: SA?? = .some(.some(SA()))
let px1 = UnsafeRawPointer(UnsafeMutablePointer<SA??>(&x1))
dumpMemory(px1, MemoryLayout<SA??>.size)
var x2: SA?? = .some(.none)
let px2 = UnsafeRawPointer(UnsafeMutablePointer<SA??>(&x2))
dumpMemory(px2, MemoryLayout<SA??>.size)
var x3: SA?? = .none
let px3 = UnsafeRawPointer(UnsafeMutablePointer<SA??>(&x3))
dumpMemory(px3, MemoryLayout<SA??>.size)
print("--test4 exit")
}
func test5() {
print("--test5 enter")
var x1: CA? = .some(CA())
let px1 = UnsafeRawPointer(UnsafeMutablePointer<CA?>(&x1))
dumpMemory(px1, MemoryLayout<CA?>.size)
let ppx1 = px1.bindMemory(to: UnsafeRawPointer.self, capacity: 1).pointee
dumpMemory(ppx1, 32)
var x2: CA? = .none
let px2 = UnsafeRawPointer(UnsafeMutablePointer<CA?>(&x2))
dumpMemory(px2, MemoryLayout<CA?>.size)
print("--test5 exit")
}
func test6() {
print("--test6 enter")
var x1: CA?? = .some(.some(CA()))
let px1 = UnsafeRawPointer(UnsafeMutablePointer<CA??>(&x1))
dumpMemory(px1, MemoryLayout<CA??>.size)
let ppx1 = px1.bindMemory(to: UnsafeRawPointer.self, capacity: 1).pointee
dumpMemory(ppx1, 32)
var x2: CA?? = .some(.none)
let px2 = UnsafeRawPointer(UnsafeMutablePointer<CA??>(&x2))
dumpMemory(px2, MemoryLayout<CA??>.size)
var x3: CA?? = .none
let px3 = UnsafeRawPointer(UnsafeMutablePointer<CA??>(&x3))
dumpMemory(px3, MemoryLayout<CA??>.size)
print("--test6 exit")
}
func test7() {
print("--test7 enter")
var x1: CA????? = .some(.some(.some(.some(.some(CA())))))
let px1 = UnsafeRawPointer(UnsafeMutablePointer<CA?????>(&x1))
dumpMemory(px1, MemoryLayout<CA?????>.size)
let ppx1 = px1.bindMemory(to: UnsafeRawPointer.self, capacity: 1).pointee
dumpMemory(ppx1, 32)
var x2: CA????? = .some(.some(.some(.some(.none))))
let px2 = UnsafeRawPointer(UnsafeMutablePointer<CA?????>(&x2))
dumpMemory(px2, MemoryLayout<CA?????>.size)
var x3: CA????? = .some(.some(.some(.none)))
let px3 = UnsafeRawPointer(UnsafeMutablePointer<CA?????>(&x3))
dumpMemory(px3, MemoryLayout<CA?????>.size)
var x4: CA????? = .some(.some(.none))
let px4 = UnsafeRawPointer(UnsafeMutablePointer<CA?????>(&x4))
dumpMemory(px4, MemoryLayout<CA?????>.size)
var x5: CA????? = .some(.none)
let px5 = UnsafeRawPointer(UnsafeMutablePointer<CA?????>(&x5))
dumpMemory(px5, MemoryLayout<CA?????>.size)
var x6: CA????? = .none
let px6 = UnsafeRawPointer(UnsafeMutablePointer<CA?????>(&x6))
dumpMemory(px6, MemoryLayout<CA?????>.size)
print("--test7 exit")
}
test1()
test2()
test3()
test4()
test5()
test6()
test7()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment