swift memory layout - goto conference · memory vacuum tubes mercury (or gin) delay line magnetic...
TRANSCRIPT
![Page 1: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/1.jpg)
![Page 2: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/2.jpg)
![Page 3: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/3.jpg)
Swift Memory LayoutMike Ash
GOTO Copenhagen 2016
💤👌🎃🌈🗝📛🔕
![Page 4: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/4.jpg)
About Memikeash.com plausible.coop NSBlog github.com/mikeash @mikeash
PHOTO
![Page 5: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/5.jpg)
• What even is memory?
• Memory dumper program
• How Swift lays out data
![Page 6: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/6.jpg)
Memory
![Page 7: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/7.jpg)
Memory
![Page 8: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/8.jpg)
MemoryVacuum tubes Mercury (or gin) delay line
Magnetic coreDRAM
![Page 9: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/9.jpg)
Memory1 0
1 0 1 0 1 0 1 0
AA 1C 00 F8 ……….
![Page 10: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/10.jpg)
Memory
AA 1C 00 F8 ……….
0 1 2 3 ……
![Page 11: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/11.jpg)
Memory
01AA2C5EFF001101
0000000000000000
00000000000000FF
A0F31C228A177013...
081624…
![Page 12: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/12.jpg)
Memory
01AA2C5EFF001101
0000000000000000
00000000000000FF
A0F31C228A177013...
00000000000000000000000000000008
…
00000000000000100000000000000018
![Page 13: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/13.jpg)
01AA2C5EFF001101
0000000000000000
00000000000000FF
A0F31C228A177013...
00000001000000000000000100000008
…
00000001000000100000000100000018
.
.
.
Memory…
![Page 14: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/14.jpg)
Memory - Big Picture0000000000000000
0000000100000000
00007FFFFFFFFFFF
FFFF800000000000
FFFFFFFFFFFFFFFF
NO
T TO
SC
ALE
![Page 15: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/15.jpg)
01AA2C5EFF001101
0000000000000000
00000000000000FF
00000001000AE780...
00000001000000000000000100000008
…
00000001000000100000000100000018
.
.
.
Memory…
A0F31C228A177013
001101FFAE73800000000001000AE780
![Page 16: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/16.jpg)
01AA2C5EFF001101
0000000000000000
00000000000000FF
00000001000AE780...
00000001000000000000000100000008
…
00000001000000100000000100000018
.
.
.
Memory…
A0F31C228A177013
001101FFAE73800000000001000AE780
![Page 17: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/17.jpg)
01AA2C5EFF001101
0000000000000000
00000000000000FF
80E70A0001000000...
00000001000000000000000100000008
…
00000001000000100000000100000018
.
.
.
Memory…
A0F31C228A177013
001101FFAE73800000000001000AE780
![Page 18: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/18.jpg)
MemoryStack Heap
Global Data
var x = …var y = …var z = x + ylet string = view.textlet text = view.stringlet count = array.count
UIView()NSObject()MyClass()YourClass()TheirClass()
malloc/free
"string constants""more string constants"class MyClass {}struct MyStruct {}protocol MyProtocol {}
![Page 19: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/19.jpg)
Dumping Memoryvar x = ...bytes(of: &x)
func bytes<T>(of value: T) -> [UInt8] { ...}
![Page 20: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/20.jpg)
Dumping Memory
https://github.com/mikeash/memorydumper2
http://tinyurl.com/swmem
http://www.www.reallyhugeurl.com/index.php/freak=no5zyn3o&ego.y=0p0iyjmf&lol=td2g2qxx&oed=gojsz0bh&oed=fheq2iqt&ego.x=g1c2s5daxsjkjhf&ssn=7kegc1kllfo1r0a&eat=qe4zk8hgmzvl827&oedeldritch=9qtni82cz8omnzk1x13twrw1qohhuhkrbuzr06q
8ya1evomdpsaglggcyhde4ksr5
![Page 21: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/21.jpg)
Dumping Memory
Xcode 8
Swift 3
![Page 22: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/22.jpg)
Dumping Memoryvar x = ...bytes(of: &x)
func bytes<T>(of value: T) -> [UInt8] { ...}
![Page 23: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/23.jpg)
Dumping Memoryfunc bytes<T>(of value: T) -> [UInt8] { var value = value let size = MemoryLayout<T>.size return withUnsafePointer(to: &value, { $0.withMemoryRebound( to: UInt8.self, capacity: size, { Array(UnsafeBufferPointer( start: $0, count: size)) }) })}
![Page 24: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/24.jpg)
Dumping Memory
let x = 0x0102030405060708print(bytes(of: x))print(bytes(of: 42))
[8, 7, 6, 5, 4, 3, 2, 1][42, 0, 0, 0, 0, 0, 0, 0]
![Page 25: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/25.jpg)
Dumping Memoryfunc hexString<Seq: Sequence> (bytes: Seq, limit: Int? = nil, separator: String = " ") -> Stringwhere Seq.Iterator.Element == UInt8 { let spacesInterval = 8 var result = "" for (index, byte) in bytes.enumerated() { if let limit = limit, index >= limit { result.append("...") break } if index > 0 && index % spacesInterval == 0 { result.append(separator) } result.append(String(format: "%02x", byte)) } return result}
![Page 26: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/26.jpg)
Dumping Memory
let x = 0x0102030405060708print(hexString(bytes: bytes(of: x)))print(hexString(bytes: bytes(of: 42)))
08070605040302012a00000000000000
![Page 27: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/27.jpg)
Dumping Memorylet x = ...
0102030405060708...
![Page 28: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/28.jpg)
Dumping Memorylet x = ...
0102030405060708...
a80148fbc9a100e0... 0081ff63abccffff...
00001fff78abcfff...
![Page 29: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/29.jpg)
Pointers are Integers
struct Pointer { var address: UInt}
![Page 30: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/30.jpg)
Pointers are Integers
buffer.withUnsafeBufferPointer({ bufferPointer in return bufferPointer.baseAddress?.withMemoryRebound( to: Pointer.self, capacity: bufferPointer.count / MemoryLayout<Pointer>.size, { let castBufferPointer = UnsafeBufferPointer( start: $0, count: bufferPointer.count / MemoryLayout<Pointer>.size) return Array(castBufferPointer) }) ?? [] })
![Page 31: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/31.jpg)
Dumping Memory4200000000000000 900400cce67f0000 800300cce67f0000 400100cce67f0000
0x0000000000000042
0x00007fe6cc000490
0x00007fe6cc000380
0x00007fe6cc000140
![Page 32: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/32.jpg)
Bad Pointers4200000000000000 900400cce67f0000 800300cce67f0000 400100cce67f0000
0x0000000000000042
0x00007fe6cc000490
0x00007fe6cc000380
0x00007fe6cc000140
………… ………… …………💥
![Page 33: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/33.jpg)
Bad Pointersmach_vm_read_overwrite
Copy N bytes from X to Y
Similar to memcpy
Returns an error on invalid pointers
![Page 34: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/34.jpg)
Bad Pointers
public func mach_vm_read_overwrite( _ target_task: vm_map_t, _ address: mach_vm_address_t, _ size: mach_vm_size_t, _ data: mach_vm_address_t, _ outsize: UnsafeMutablePointer<mach_vm_size_t>!) -> kern_return_t
![Page 35: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/35.jpg)
Safe Readsfunc safeRead(ptr: Pointer, into: inout [UInt8]) -> Bool { let result = into.withUnsafeMutableBufferPointer( { bufferPointer -> kern_return_t in var outSize: mach_vm_size_t = 0 return mach_vm_read_overwrite( mach_task_self_, mach_vm_address_t(ptr), mach_vm_size_t(bufferPointer.count), mach_vm_address_t(bufferPointer.baseAddress), &outSize) }) return result == KERN_SUCCESS}
![Page 36: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/36.jpg)
How Much to Read?Initial value: MemoryLayout<T>.size
Heap allocations: malloc_size
Code and Globals: scan with dladdrBonus: dladdr also gives names
![Page 37: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/37.jpg)
Name Mangling_TFCs23_ContiguousArrayStorage32_getNonVerbatimBridgedHeapBufferfT_GVs11_HeapBufferSiPs9AnyObject__
➜ swift-demangle ➜
Swift._ContiguousArrayStorage._getNonVerbatimBridgedHeapBuffer () -> Swift._HeapBuffer<Swift.Int, Swift.AnyObject>
![Page 38: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/38.jpg)
Strings
let lowerBound: UInt8 = 32let upperBound: UInt8 = 126 let pieces = buffer.split(whereSeparator: { !(lowerBound ... upperBound ~= $0) })let sufficientlyLongPieces = pieces.filter( { $0.count >= 4 })return sufficientlyLongPieces.map( { String(bytes: $0, encoding: .utf8)! })
Search for printable ASCII at least 4 characters long
![Page 39: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/39.jpg)
Outputlet x = …
0102030405060708...
a80148fbc9a100e0... 0081ff63abccffff...
00001fff78abcfff...
![Page 40: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/40.jpg)
Graphviz_100c001a0 [label="malloc 0x100c001a0 (16 bytes)404fc00001000000303ec00001000000"]_100c001a0 -> _100c04f40 [label="@0"]_100c001a0 -> _100c03e30 [label="@8"]_100c033f0 [label="malloc 0x100c033f0 (16 bytes)404fc000010000001a000c1000000020"]_100c033f0 -> _100c04f40 [label="@0"]_100c03e30 [label="malloc 0x100c03e30 (16 bytes)536f6d657468696e670048656c6c6f21Strings:SomethingHello!"]
![Page 41: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/41.jpg)
Output
malloc 0x100c001a0 (16 bytes)404fc00001000000303ec00001000000
malloc 0x100c04f40 (16 bytes)4c6561662068657265000c10000000f0
Strings:Leaf here
@0
malloc 0x100c03e30 (16 bytes)536f6d657468696e670048656c6c6f21
Strings:Something
Hello!
@8
malloc 0x100c033f0 (16 bytes)404fc000010000001a000c1000000020
@0
malloc 0x100c02d80 (16 bytes)f033c00001000000a001c00001000000
@8 @0
unknown 0x7fff5fbff260 (8 bytes)802dc00001000000
@0
![Page 42: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/42.jpg)
Memory Layouts
• Arch-specific (these are x86-64)
• Swift stuff depends on the compiler version
• Offsets, sizes, contents, meaning subject to change
• Still useful for debugging, general knowledge of how things work
![Page 43: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/43.jpg)
C structs struct S { long x; long y; long z; }; S s = { 1, 2, 3 };
unknown 0x7fff5fbff2a0 (24 bytes)010000000000000002000000000000000300000000000000
![Page 44: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/44.jpg)
C structs struct WithPadding { char a; char b; char c; short d; char e; int f; char g; long h; }; WithPadding withPadding = { 1, 2, 3, 4, 5, 6, 7, 8 };
unknown 0x7fff5fbff288 (24 bytes)010203000400050006000000070000000800000000000000
![Page 45: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/45.jpg)
C++ classes class SimpleClass { public: long x; virtual void f() {} virtual void g() {} virtual void h() {} }; SimpleClass simpleClass; simpleClass.x = 1;
![Page 46: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/46.jpg)
C++ classes
DumpCMemory::SimpleClass::h() 0x100001a10 (16 bytes)554889e548897df85dc3660f1f440000
unknown 0x7fff5fbff250 (16 bytes)20d53900010000000100000000000000
vtable for DumpCMemory::SimpleClass 0x10039d520 (24 bytes)f019000001000000001a000001000000101a000001000000
@0
@16
DumpCMemory::SimpleClass::f() 0x1000019f0 (16 bytes)554889e548897df85dc3660f1f440000
@0
DumpCMemory::SimpleClass::g() 0x100001a00 (16 bytes)554889e548897df85dc3660f1f440000
@8
![Page 47: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/47.jpg)
C++ classes
DumpCMemory::SimpleClass::h() 0x100001a10 (16 bytes)554889e548897df85dc3660f1f440000
unknown 0x7fff5fbff250 (16 bytes)20d53900010000000100000000000000
vtable for DumpCMemory::SimpleClass 0x10039d520 (24 bytes)f019000001000000001a000001000000101a000001000000
@0
@16
DumpCMemory::SimpleClass::f() 0x1000019f0 (16 bytes)554889e548897df85dc3660f1f440000
@0
DumpCMemory::SimpleClass::g() 0x100001a00 (16 bytes)554889e548897df85dc3660f1f440000
@8
![Page 48: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/48.jpg)
C++ classes class SimpleSubclass: public SimpleClass { public: long y; virtual void i() {} virtual void j() {} }; SimpleSubclass simpleSubclass; simpleSubclass.x = 1; simpleSubclass.y = 2;
![Page 49: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/49.jpg)
C++ classes
DumpCMemory::SimpleSubclass::j() 0x100001a70 (16 bytes)554889e548897df85dc3660f1f440000
unknown 0x7fff5fbff238 (24 bytes)58d539000100000001000000000000000200000000000000
vtable for DumpCMemory::SimpleSubclass 0x10039d558 (40 bytes)f019000001000000001a000001000000101a000001000000601a000001000000701a000001000000
@0
@32
DumpCMemory::SimpleClass::g() 0x100001a00 (16 bytes)554889e548897df85dc3660f1f440000
@8
DumpCMemory::SimpleClass::f() 0x1000019f0 (16 bytes)554889e548897df85dc3660f1f440000
@0
DumpCMemory::SimpleClass::h() 0x100001a10 (16 bytes)554889e548897df85dc3660f1f440000
@16
DumpCMemory::SimpleSubclass::i() 0x100001a60 (16 bytes)554889e548897df85dc3660f1f440000
@24
![Page 50: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/50.jpg)
C++ classes
DumpCMemory::SimpleSubclass::j() 0x100001a70 (16 bytes)554889e548897df85dc3660f1f440000
unknown 0x7fff5fbff238 (24 bytes)58d539000100000001000000000000000200000000000000
vtable for DumpCMemory::SimpleSubclass 0x10039d558 (40 bytes)f019000001000000001a000001000000101a000001000000601a000001000000701a000001000000
@0
@32
DumpCMemory::SimpleClass::g() 0x100001a00 (16 bytes)554889e548897df85dc3660f1f440000
@8
DumpCMemory::SimpleClass::f() 0x1000019f0 (16 bytes)554889e548897df85dc3660f1f440000
@0
DumpCMemory::SimpleClass::h() 0x100001a10 (16 bytes)554889e548897df85dc3660f1f440000
@16
DumpCMemory::SimpleSubclass::i() 0x100001a60 (16 bytes)554889e548897df85dc3660f1f440000
@24
![Page 51: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/51.jpg)
C++ classes
class SecondSuperclass { public: long y; virtual void k() {} virtual void l() {} };
![Page 52: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/52.jpg)
C++ classes class MultipleInheritanceSubclass: public SimpleClass, SecondSuperclass { public: long z; }; MultipleInheritanceSubclass multipleInheritanceSubclass; multipleInheritanceSubclass.x = 1; multipleInheritanceSubclass.y = 2; multipleInheritanceSubclass.z = 3;
![Page 53: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/53.jpg)
C++ classes
__cxxabiv1::__vmi_class_type_info::search_above_dst(__cxxabiv1::__dynamic_cast_info*, void const*, void const*, int, bool) const 0x7fff8952c4da (292 bytes)554889e54157415641554154534883ec284589ce448945d448894dc8488955c04889f34989fd488b43104584f67416498b7d08488b7008e8
2e0a000085c0750e...Strings:
AWAVAUATSH([A\A]A^A_]([A\A]A^A_]
typeinfo for DumpCMemory::MultipleInheritanceSubclass 0x10039d5f0 (56 bytes)98bc4778ff7f0000
10ad340001000000000000000200000038d53900010000000200000000000000e0d53900010000000010000000000000
vtable for __cxxabiv1::__vmi_class_type_info 0x7fff7847bc98 (72 bytes)c8b45289ff7f0000ceb45289ff7f0000ceb35289ff7f0000d0b35289ff7f00007ab55289ff7f0000dac45289ff7f0000e2bf5289ff7f0000
74b75289ff7f0000...
@0
typeinfo name for DumpCMemory::MultipleInheritanceSubclass 0x10034ad10 (48 bytes)5a313144756d70434d656d6f72794532374d756c7469706c65496e6865726974616e6365537562636c61737300000000
Strings:Z11DumpCMemoryE27MultipleInheritanceSubclass
@8
typeinfo for DumpCMemory::SimpleClass 0x10039d538 (16 bytes)b8bb4778ff7f0000d0ac340001000000
@24
typeinfo for DumpCMemory::SecondSuperclass 0x10039d5e0 (16 bytes)b8bb4778ff7f0000
40ad340001000000
@40
@40
__cxxabiv1::__class_type_info::can_catch(__cxxabiv1::__shim_type_info const*, void*&) const 0x7fff8952b57a (178 bytes)554889e54156534883ec504989d64889fbb0014839f30f848d0000004889f7e88e0000004885c0747e488945a048c745a80000000048895db048c745b8ffffff...
Strings:AVSHP[A^]
@32
__cxxabiv1::__vmi_class_type_info::~__vmi_class_type_info() 0x7fff8952b4c8 (6 bytes)e9a517000090
@0
__cxxabiv1::__vmi_class_type_info::~__vmi_class_type_info() 0x7fff8952b4ce (28 bytes)554889e553504889fbe8961700004889df4883c4085b5de9
76190000
@8
__cxxabiv1::__shim_type_info::noop1() const 0x7fff8952b3ce (2 bytes)c390
@16
__cxxabiv1::__shim_type_info::noop2() const 0x7fff8952b3d0 (2 bytes)c390
@24
__cxxabiv1::__vmi_class_type_info::search_below_dst(__cxxabiv1::__dynamic_cast_info*, void const*, int, bool) const 0x7fff8952bfe2 (656 bytes)554889e54157415641554154534883ec184589c5894dd44989d74989f64889fb498b46104584ed74304c8b6308488b70084c89e7e8290f00
0085c00f84990000...Strings:
AWAVAUATSHt|I;
M9~ M9~(
[A\A]A^A_]
@48
__cxxabiv1::__vmi_class_type_info::has_unambiguous_public_base(__cxxabiv1::__dynamic_cast_info*, void*, int) const 0x7fff8952b774 (196 bytes)554889e5415741564155415453504189ce4989d74989f44889fb493b5c2410744d488d7b18448b6b144c89e64c89fa4489f1e88bffffff49
83fd02727849c1e5...Strings:
AWAVAUATSPAI;\$
D$ HD$<A|$ Et$0At$0H
[A\A]A^A_]
@56
vtable for __cxxabiv1::__class_type_info 0x7fff7847bbb8 (72 bytes)78b45289ff7f00007eb45289ff7f0000ceb35289ff7f0000d0b35289ff7f00007ab55289ff7f000082c65289ff7f000032c45289ff7f0000
acb65289ff7f0000...
@0
typeinfo name for DumpCMemory::SimpleClass 0x10034acd0 (32 bytes)5a313144756d70434d656d6f727945313153696d706c65436c61737300000000
Strings:Z11DumpCMemoryE11SimpleClass
@8 @0
typeinfo name for DumpCMemory::SecondSuperclass 0x10034ad40 (112 bytes)5a313144756d70434d656d6f72794531365365636f6e645375706572636c6173730000000000000000000000000000000056534337646c5f
696e666f00000000...Strings:
Z11DumpCMemoryE16SecondSuperclassVSC7dl_info
dli_fnamedli_fbasedli_snamedli_saddr
@8
@32
__cxxabiv1::__class_type_info::~__class_type_info() 0x7fff8952b47e (28 bytes)554889e553504889fbe8e61700004889df4883c4085b5de9
c6190000
@8
__cxxabiv1::__class_type_info::~__class_type_info() 0x7fff8952b478 (6 bytes)e9f517000090
@0
__cxxabiv1::__class_type_info::has_unambiguous_public_base(__cxxabiv1::__dynamic_cast_info*, void*, int) const 0x7fff8952b6ac (62 bytes)483b7e107537488b46204885c074154839d0741fff463cc7
463002000000c6464e01eb1948895620894e30c7463c01000000c3837e300275
04894e30c3c3
@56@16@24
__cxxabiv1::__class_type_info::search_above_dst(__cxxabiv1::__dynamic_cast_info*, void const*, void const*, int, bool) const 0x7fff8952c682 (90 bytes)554889e5415741564154534589c64989cf4989d44889f3488b43104584c97413488b7f08488b7008e89508000085c07507eb0e4839c77409
5b415c415e415f5d...Strings:
AWAVATSE[A\A^A_][A\A^A_]
@40
__cxxabiv1::__class_type_info::search_below_dst(__cxxabiv1::__dynamic_cast_info*, void const*, int, bool) const 0x7fff8952c432 (168 bytes)554889e5415741564154534189ce4989d74889f3488b43104584c074294c8b6708488b70084c89e7e8e50a000085c0744f488b03488b7008
4c89e7e8d20a0000...Strings:
AWAVATSAt5H;;uOL9{ t<L9{(t6D
[A\A^A_]
@48
unknown 0x7fff5fbff210 (40 bytes)a8d53900010000000100000000000000d0d539000100000030000000000000000200000000000000
vtable for DumpCMemory::MultipleInheritanceSubclass 0x10039d5a8 (56 bytes)f019000001000000001a000001000000101a000001000000
f0fffffffffffffff0d5390001000000001b000001000000101b000001000000
@0
vtable for DumpCMemory::MultipleInheritanceSubclass 0x10039d5d0 (16 bytes)001b000001000000101b000001000000
@16
@32
DumpCMemory::SecondSuperclass::k() 0x100001b00 (16 bytes)554889e548897df85dc3660f1f440000
@40
DumpCMemory::SimpleClass::f() 0x1000019f0 (16 bytes)554889e548897df85dc3660f1f440000
@0
DumpCMemory::SecondSuperclass::l() 0x100001b10 (16 bytes)554889e548897df85dc3909090909090
@48
DumpCMemory::SimpleClass::g() 0x100001a00 (16 bytes)554889e548897df85dc3660f1f440000
@8
DumpCMemory::SimpleClass::h() 0x100001a10 (16 bytes)554889e548897df85dc3660f1f440000
@16@0@8
![Page 54: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/54.jpg)
C++ classes
__cxxabiv1::__vmi_class_type_info::search_above_dst(__cxxabiv1::__dynamic_cast_info*, void const*, void const*, int, bool) const 0x7fff8952c4da (292 bytes)554889e54157415641554154534883ec284589ce448945d448894dc8488955c04889f34989fd488b43104584f67416498b7d08488b7008e8
2e0a000085c0750e...Strings:
AWAVAUATSH([A\A]A^A_]([A\A]A^A_]
typeinfo for DumpCMemory::MultipleInheritanceSubclass 0x10039d5f0 (56 bytes)98bc4778ff7f000010ad340001000000000000000200000038d53900010000000200000000000000e0d53900010000000210000000000000
vtable for __cxxabiv1::__vmi_class_type_info 0x7fff7847bc98 (72 bytes)c8b45289ff7f0000ceb45289ff7f0000ceb35289ff7f0000d0b35289ff7f00007ab55289ff7f0000dac45289ff7f0000e2bf5289ff7f0000
74b75289ff7f0000...
@0
typeinfo name for DumpCMemory::MultipleInheritanceSubclass 0x10034ad10 (48 bytes)5a313144756d70434d656d6f72794532374d756c7469706c65496e6865726974616e6365537562636c61737300000000
Strings:Z11DumpCMemoryE27MultipleInheritanceSubclass
@8
typeinfo for DumpCMemory::SimpleClass 0x10039d538 (16 bytes)b8bb4778ff7f0000d0ac340001000000
@24
typeinfo for DumpCMemory::SecondSuperclass 0x10039d5e0 (16 bytes)b8bb4778ff7f000040ad340001000000
@40
@40
__cxxabiv1::__class_type_info::can_catch(__cxxabiv1::__shim_type_info const*, void*&) const 0x7fff8952b57a (178 bytes)554889e54156534883ec504989d64889fbb0014839f30f848d0000004889f7e88e0000004885c0747e488945a048c745a80000000048895db048c745b8ffffff...
Strings:AVSHP[A^]
@32
__cxxabiv1::__vmi_class_type_info::~__vmi_class_type_info() 0x7fff8952b4c8 (6 bytes)e9a517000090
@0
__cxxabiv1::__vmi_class_type_info::~__vmi_class_type_info() 0x7fff8952b4ce (28 bytes)554889e553504889fbe8961700004889df4883c4085b5de9
76190000
@8
__cxxabiv1::__shim_type_info::noop1() const 0x7fff8952b3ce (2 bytes)c390
@16
__cxxabiv1::__shim_type_info::noop2() const 0x7fff8952b3d0 (2 bytes)c390
@24
__cxxabiv1::__vmi_class_type_info::search_below_dst(__cxxabiv1::__dynamic_cast_info*, void const*, int, bool) const 0x7fff8952bfe2 (656 bytes)554889e54157415641554154534883ec184589c5894dd44989d74989f64889fb498b46104584ed74304c8b6308488b70084c89e7e8290f00
0085c00f84990000...Strings:
AWAVAUATSHt|I;
M9~ M9~(
[A\A]A^A_]
@48
__cxxabiv1::__vmi_class_type_info::has_unambiguous_public_base(__cxxabiv1::__dynamic_cast_info*, void*, int) const 0x7fff8952b774 (196 bytes)554889e5415741564155415453504189ce4989d74989f44889fb493b5c2410744d488d7b18448b6b144c89e64c89fa4489f1e88bffffff49
83fd02727849c1e5...Strings:
AWAVAUATSPAI;\$
D$ HD$<A
|$ Et$0At$0H
[A\A]A^A_]
@56
vtable for __cxxabiv1::__class_type_info 0x7fff7847bbb8 (72 bytes)78b45289ff7f00007eb45289ff7f0000ceb35289ff7f0000d0b35289ff7f00007ab55289ff7f000082c65289ff7f000032c45289ff7f0000
acb65289ff7f0000...
@0
typeinfo name for DumpCMemory::SimpleClass 0x10034acd0 (32 bytes)5a313144756d70434d656d6f727945313153696d706c65436c61737300000000
Strings:Z11DumpCMemoryE11SimpleClass
@8 @0
typeinfo name for DumpCMemory::SecondSuperclass 0x10034ad40 (112 bytes)5a313144756d70434d656d6f72794531365365636f6e645375706572636c6173730000000000000000000000000000000056534337646c5f
696e666f00000000...Strings:
Z11DumpCMemoryE16SecondSuperclassVSC7dl_info
dli_fnamedli_fbasedli_snamedli_saddr
@8
@32
__cxxabiv1::__class_type_info::~__class_type_info() 0x7fff8952b47e (28 bytes)554889e553504889fbe8e61700004889df4883c4085b5de9
c6190000
@8
__cxxabiv1::__class_type_info::~__class_type_info() 0x7fff8952b478 (6 bytes)e9f517000090
@0
__cxxabiv1::__class_type_info::has_unambiguous_public_base(__cxxabiv1::__dynamic_cast_info*, void*, int) const 0x7fff8952b6ac (62 bytes)483b7e107537488b46204885c074154839d0741fff463cc7
463002000000c6464e01eb1948895620894e30c7463c01000000c3837e300275
04894e30c3c3
@56@16@24
__cxxabiv1::__class_type_info::search_above_dst(__cxxabiv1::__dynamic_cast_info*, void const*, void const*, int, bool) const 0x7fff8952c682 (90 bytes)554889e5415741564154534589c64989cf4989d44889f3488b43104584c97413488b7f08488b7008e89508000085c07507eb0e4839c77409
5b415c415e415f5d...Strings:
AWAVATSE[A\A^A_][A\A^A_]
@40
__cxxabiv1::__class_type_info::search_below_dst(__cxxabiv1::__dynamic_cast_info*, void const*, int, bool) const 0x7fff8952c432 (168 bytes)554889e5415741564154534189ce4989d74889f3488b43104584c074294c8b6708488b70084c89e7e8e50a000085c0744f488b03488b7008
4c89e7e8d20a0000...Strings:
AWAVATSAt5H;;uOL9{ t<L9{(t6D
[A\A^A_]
@48
unknown 0x7fff5fbff210 (40 bytes)a8d53900010000000100000000000000d0d539000100000002000000000000000300000000000000
vtable for DumpCMemory::MultipleInheritanceSubclass 0x10039d5a8 (56 bytes)f019000001000000001a000001000000101a000001000000
f0fffffffffffffff0d5390001000000001b000001000000101b000001000000
@0
vtable for DumpCMemory::MultipleInheritanceSubclass 0x10039d5d0 (16 bytes)001b000001000000101b000001000000
@16
@32
DumpCMemory::SecondSuperclass::k() 0x100001b00 (16 bytes)554889e548897df85dc3660f1f440000
@40
DumpCMemory::SimpleClass::f() 0x1000019f0 (16 bytes)554889e548897df85dc3660f1f440000
@0
DumpCMemory::SecondSuperclass::l() 0x100001b10 (16 bytes)554889e548897df85dc3909090909090
@48
DumpCMemory::SimpleClass::g() 0x100001a00 (16 bytes)554889e548897df85dc3660f1f440000
@8
DumpCMemory::SimpleClass::h() 0x100001a10 (16 bytes)554889e548897df85dc3660f1f440000
@16@0@8
![Page 55: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/55.jpg)
Swift Typesstruct EmptyStruct {}
unknown 0x7fff5fbff2a0 (0 bytes)
![Page 56: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/56.jpg)
Swift Typesstruct SimpleStruct { var x: Int = 1 var y: Int = 2 var z: Int = 3}
unknown 0x7fff5fbff2a0 (24 bytes)010000000000000002000000000000000300000000000000
![Page 57: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/57.jpg)
Swift Typesstruct StructWithPadding { var a: UInt8 = 1 var b: UInt8 = 2 var c: UInt8 = 3 var d: UInt16 = 4 var e: UInt8 = 5 var f: UInt32 = 6 var g: UInt8 = 7 var h: UInt64 = 8}
unknown 0x7fff5fbff2a0 (24 bytes)0102035f0400050006000000077f00000800000000000000
![Page 58: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/58.jpg)
Swift Types
class SimpleClass { var x: Int = 1 var y: Int = 2 var z: Int = 3}
![Page 59: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/59.jpg)
Swift Types
unknown 0x100d050e5 (128 bytes)000000107c3c0001000000000000000000000000000000000000000000000000000000000000000000000000133d00010000000000000000
0000000000000000...
memorydumper2.SimpleClass.y.setter : Swift.Int 0x10000b910 (32 bytes)554889e548897df8488975f048897e185dc366666666662e0f1f840000000000
Strings:fffff.
memorydumper2.SimpleClass.z.getter : Swift.Int 0x10000b950 (16 bytes)554889e548897df8488b47205dc36690
OBJC_METACLASS_$_SwiftObject 0x1003d0c00 (40 bytes)000c3d0001000000d80b3d00010000006027d000010000000300000001000000c420d00001000000
@0
ObjC class SwiftObject 0x1003d0bd8 (40 bytes)000c3d00010000000000000000000000e00dff8cff7f0000
00000000000000002427d00001000000
@8
malloc 0x100d02760 (80 bytes)00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033dbb49bff7f0000
b0e2330001000000...
@16
unknown 0x100000003 (128 bytes)fe0700000103000080020000001900000058120000850021000000000019000000480000005f5f504147455a45524f000000000000000000
0000000000000000...Strings:
__PAGEZERO__TEXT
@24
unknown 0x100d020c4 (128 bytes)07000000d8d93c000100000000d53c00010000000000000000000000c0d93c000100000008c28e0001000000000000000000000000000000
0000000000000000...
@32
@0
_objc_empty_cache 0x7fff8cff0de0 (128 bytes)0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000...
@16
unknown 0x100d02724 (128 bytes)0000000010de3c000100000020da3c0001000000c8dd3c0001000000c0d93c000100000098c18e0001000000000000000000000000000000
0000000000000000...
@32
@72
CreateStringFromFileSystemRepresentationByAddingPercentEscapes.hexchars 0x7fff9bb4db33 (128 bytes)636c6173730069734b696e644f66436c6173733a0073657453656c6563743a00736574433a007365744d3a00736574466163746f723a0073
65744e756d4b6579...Strings:
classisKindOfClass:
setSelect:setC:setM:
setFactor:setNumKey:
setSeeds:setG:
setRankTable:setKeys2:
setKeyLen:setSubShare
@48
+[SwiftObject class] 0x10033e2b0 (16 bytes)4889f8c36666662e0f1f840000000000
Strings:fff.
@56
ObjC class memorydumper2.SimpleClass 0x1003d13b8 (184 bytes)80133d0001000000d80b3d0001000000e00dff8cff7f0000
0000000000000000e550d0000100000003000000000000002800000007000000
c800000010000000...
@32 @112 @128 @8
metaclass for memorydumper2.SimpleClass 0x1003d1380 (40 bytes)000c3d0001000000000c3d00010000002051d0000100000003000000010000008454d00001000000
@0
@16memorydumper2.SimpleClass.x.getter : Swift.Int 0x10000b8b0 (16 bytes)
554889e548897df8488b47105dc36690
@80
memorydumper2.SimpleClass.x.setter : Swift.Int 0x10000b8c0 (32 bytes)554889e548897df8488975f048897e105dc366666666662e0f1f840000000000
Strings:fffff.
@88
memorydumper2.SimpleClass.x.materializeForSet : Swift.Int 0x10000b8e0 (32 bytes)554889e54883c21031c089c14889d04889ca488975f848897df05dc30f1f4000
@96
memorydumper2.SimpleClass.y.getter : Swift.Int 0x10000b900 (16 bytes)554889e548897df8488b47185dc36690
@104
memorydumper2.SimpleClass.y.materializeForSet : Swift.Int 0x10000b930 (32 bytes)554889e54883c21831c089c14889d04889ca488975f848897df05dc30f1f4000
@120
memorydumper2.SimpleClass.z.setter : Swift.Int 0x10000b960 (32 bytes)554889e548897df8488975f048897e205dc366666666662e0f1f840000000000
Strings:fffff.
@136
memorydumper2.SimpleClass.z.materializeForSet : Swift.Int 0x10000b980 (32 bytes)554889e54883c22031c089c14889d04889ca488975f848897df05dc30f1f4000
@144
memorydumper2.SimpleClass.init () -> memorydumper2.SimpleClass 0x10000b9a0 (48 bytes)554889e548c747100100000048c747180200000048c74720030000004889f85dc36666666666662e0f1f840000000000
Strings:ffffff.
@152
@0 @8
@24
unknown 0x100d05484 (128 bytes)07000000607b3c00010000000000000000000000000000000000000000000000000000000000000000000000c8123d000100000000000000
000000005f547447...Strings:
_TtGCs22_NativeSetStorageOwnerSS_
@32
malloc 0x100d05120 (80 bytes)00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033dbb49bff7f0000
b0e2330001000000...
@16
unknown 0x100000001 (128 bytes)faedfe0700000103
000080020000001900000058120000850021000000000019000000480000005f5f504147455a45524f00000000000000
0000000000000000...Strings:
__PAGEZERO__TEXT
@120
@48 @56
@72
Instance of memorydumper2.SimpleClass 0x100d05170 (48 bytes)b8133d00010000000400000002000000010000000000000002000000000000000300000000000000
ffffffffffffffff
@0
![Page 60: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/60.jpg)
Swift Types
unknown 0x100d050e5 (128 bytes)000000107c3c0001000000000000000000000000000000000000000000000000000000000000000000000000133d00010000000000000000
0000000000000000...
memorydumper2.SimpleClass.y.setter : Swift.Int 0x10000b910 (32 bytes)554889e548897df8488975f048897e185dc366666666662e0f1f840000000000
Strings:fffff.
memorydumper2.SimpleClass.z.getter : Swift.Int 0x10000b950 (16 bytes)554889e548897df8488b47205dc36690
OBJC_METACLASS_$_SwiftObject 0x1003d0c00 (40 bytes)000c3d0001000000d80b3d00010000006027d000010000000300000001000000c420d00001000000
@0
ObjC class SwiftObject 0x1003d0bd8 (40 bytes)000c3d00010000000000000000000000e00dff8cff7f0000
00000000000000002427d00001000000
@8
malloc 0x100d02760 (80 bytes)00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033dbb49bff7f0000
b0e2330001000000...
@16
unknown 0x100000003 (128 bytes)fe0700000103000080020000001900000058120000850021000000000019000000480000005f5f504147455a45524f000000000000000000
0000000000000000...Strings:
__PAGEZERO__TEXT
@24
unknown 0x100d020c4 (128 bytes)07000000d8d93c000100000000d53c00010000000000000000000000c0d93c000100000008c28e0001000000000000000000000000000000
0000000000000000...
@32
@0
_objc_empty_cache 0x7fff8cff0de0 (128 bytes)0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000...
@16
unknown 0x100d02724 (128 bytes)0000000010de3c000100000020da3c0001000000c8dd3c0001000000c0d93c000100000098c18e0001000000000000000000000000000000
0000000000000000...
@32
@72
CreateStringFromFileSystemRepresentationByAddingPercentEscapes.hexchars 0x7fff9bb4db33 (128 bytes)636c6173730069734b696e644f66436c6173733a0073657453656c6563743a00736574433a007365744d3a00736574466163746f723a0073
65744e756d4b6579...Strings:
classisKindOfClass:
setSelect:setC:setM:
setFactor:setNumKey:
setSeeds:setG:
setRankTable:setKeys2:
setKeyLen:setSubShare
@48
+[SwiftObject class] 0x10033e2b0 (16 bytes)4889f8c36666662e0f1f840000000000
Strings:fff.
@56
ObjC class memorydumper2.SimpleClass 0x1003d13b8 (184 bytes)80133d0001000000d80b3d0001000000e00dff8cff7f0000
0000000000000000e550d0000100000003000000000000002800000007000000
c800000010000000...
@32 @112 @128 @8
metaclass for memorydumper2.SimpleClass 0x1003d1380 (40 bytes)000c3d0001000000000c3d00010000002051d0000100000003000000010000008454d00001000000
@0
@16memorydumper2.SimpleClass.x.getter : Swift.Int 0x10000b8b0 (16 bytes)
554889e548897df8488b47105dc36690
@80
memorydumper2.SimpleClass.x.setter : Swift.Int 0x10000b8c0 (32 bytes)554889e548897df8488975f048897e105dc366666666662e0f1f840000000000
Strings:fffff.
@88
memorydumper2.SimpleClass.x.materializeForSet : Swift.Int 0x10000b8e0 (32 bytes)554889e54883c21031c089c14889d04889ca488975f848897df05dc30f1f4000
@96
memorydumper2.SimpleClass.y.getter : Swift.Int 0x10000b900 (16 bytes)554889e548897df8488b47185dc36690
@104
memorydumper2.SimpleClass.y.materializeForSet : Swift.Int 0x10000b930 (32 bytes)554889e54883c21831c089c14889d04889ca488975f848897df05dc30f1f4000
@120
memorydumper2.SimpleClass.z.setter : Swift.Int 0x10000b960 (32 bytes)554889e548897df8488975f048897e205dc366666666662e0f1f840000000000
Strings:fffff.
@136
memorydumper2.SimpleClass.z.materializeForSet : Swift.Int 0x10000b980 (32 bytes)554889e54883c22031c089c14889d04889ca488975f848897df05dc30f1f4000
@144
memorydumper2.SimpleClass.init () -> memorydumper2.SimpleClass 0x10000b9a0 (48 bytes)554889e548c747100100000048c747180200000048c74720030000004889f85dc36666666666662e0f1f840000000000
Strings:ffffff.
@152
@0 @8
@24
unknown 0x100d05484 (128 bytes)07000000607b3c00010000000000000000000000000000000000000000000000000000000000000000000000c8123d000100000000000000
000000005f547447...Strings:
_TtGCs22_NativeSetStorageOwnerSS_
@32
malloc 0x100d05120 (80 bytes)00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033dbb49bff7f0000
b0e2330001000000...
@16
unknown 0x100000001 (128 bytes)faedfe0700000103
000080020000001900000058120000850021000000000019000000480000005f5f504147455a45524f00000000000000
0000000000000000...Strings:
__PAGEZERO__TEXT
@120
@48 @56
@72
Instance of memorydumper2.SimpleClass 0x100d05170 (48 bytes)b8133d00010000000400000002000000010000000000000002000000000000000300000000000000
ffffffffffffffff
@0
![Page 61: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/61.jpg)
Swift Types
CreateStringFromFileSystemRepresentationByAddingPercentEscapes.hexchars 0x7fff9659db33 (128 bytes)636c6173730069734b696e644f66436c6173733a0073657453656c6563743a00736574433a007365744d3a00736574466163746f723a0073
65744e756d4b6579...Strings:
classisKindOfClass:
setSelect:setC:setM:
setFactor:setNumKey:
setSeeds:setG:
setRankTable:setKeys2:
setKeyLen:setSubShare
Instance of memorydumper2.ClassWithPadding 0x101700c00 (48 bytes)00063d000100000004000000020000000102030004000500060000000700000008000000000000004f00171000000300
ObjC class memorydumper2.ClassWithPadding 0x1003d0600 (344 bytes)c8053d000100000030fd3c0001000000e02d018aff7f0000
0000000000000000950c70010100000003000000000000002800000007000000
6801000010000000...
@0
memorydumper2.ClassWithPadding.a.setter : Swift.UInt8 0x10000c050 (32 bytes)554889e54088f88845f8488975f08846105dc3666666662e0f1f840000000000
Strings:ffff.
@88
memorydumper2.ClassWithPadding.d.getter : Swift.UInt16 0x10000c130 (16 bytes)554889e548897df8668b47145dc36690
@152
memorydumper2.ClassWithPadding.b.setter : Swift.UInt8 0x10000c0a0 (32 bytes)554889e54088f88845f8488975f08846115dc3666666662e0f1f840000000000
Strings:ffff.
@112
memorydumper2.ClassWithPadding.d.materializeForSet : Swift.UInt16 0x10000c160 (32 bytes)554889e54883c21431c089c14889d04889ca488975f848897df05dc30f1f4000
@168
memorydumper2.ClassWithPadding.f.getter : Swift.UInt32 0x10000c1d0 (16 bytes)554889e548897df88b47185dc30f1f00
@200
memorydumper2.ClassWithPadding.f.setter : Swift.UInt32 0x10000c1e0 (16 bytes)554889e5897df8488975f0897e185dc3
@208
ObjC class SwiftObject 0x1003cfd30 (40 bytes)58fd3c00010000000000000000000000e02d018aff7f0000
00000000000000009427600101000000
@8
memorydumper2.ClassWithPadding.g.setter : Swift.UInt8 0x10000c220 (32 bytes)554889e54088f88845f8488975f088461c5dc3666666662e0f1f840000000000
Strings:ffff.
@232
memorydumper2.ClassWithPadding.h.setter : Swift.UInt64 0x10000c270 (32 bytes)554889e548897df8488975f048897e205dc366666666662e0f1f840000000000
Strings:fffff.
@256
memorydumper2.ClassWithPadding.e.getter : Swift.UInt8 0x10000c180 (16 bytes)554889e548897df88a47165dc30f1f00
@176
memorydumper2.ClassWithPadding.c.getter : Swift.UInt8 0x10000c0e0 (16 bytes)554889e548897df88a47125dc30f1f00
@128
_objc_empty_cache 0x7fff8a012de0 (128 bytes)0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000...
@16
unknown 0x101700c95 (128 bytes)000000f86e3c0001000000000000000000000000000000000000000000000000000000000000000000000010053d00010000000000000000
0000000000000000...
@32
memorydumper2.ClassWithPadding.c.setter : Swift.UInt8 0x10000c0f0 (32 bytes)554889e54088f88845f8488975f08846125dc3666666662e0f1f840000000000
Strings:ffff.
@136
metaclass for memorydumper2.ClassWithPadding 0x1003d05c8 (40 bytes)58fd3c000100000058fd3c0001000000d00c7001010000000300000001000000540c700101000000
@0
memorydumper2.ClassWithPadding.a.getter : Swift.UInt8 0x10000c040 (16 bytes)554889e548897df88a47105dc30f1f00
@80
memorydumper2.ClassWithPadding.a.materializeForSet : Swift.UInt8 0x10000c070 (32 bytes)554889e54883c21031c089c14889d04889ca488975f848897df05dc30f1f4000
@96
memorydumper2.ClassWithPadding.b.getter : Swift.UInt8 0x10000c090 (16 bytes)554889e548897df88a47115dc30f1f00
@104
memorydumper2.ClassWithPadding.b.materializeForSet : Swift.UInt8 0x10000c0c0 (32 bytes)554889e54883c21131c089c14889d04889ca488975f848897df05dc30f1f4000
@120
memorydumper2.ClassWithPadding.c.materializeForSet : Swift.UInt8 0x10000c110 (32 bytes)554889e54883c21231c089c14889d04889ca488975f848897df05dc30f1f4000
@144
memorydumper2.ClassWithPadding.d.setter : Swift.UInt16 0x10000c140 (32 bytes)554889e56689f8668945f8488975f0668946145dc366662e0f1f840000000000
@160
memorydumper2.ClassWithPadding.e.setter : Swift.UInt8 0x10000c190 (32 bytes)554889e54088f88845f8488975f08846165dc3666666662e0f1f840000000000
Strings:ffff.
@184
memorydumper2.ClassWithPadding.e.materializeForSet : Swift.UInt8 0x10000c1b0 (32 bytes)554889e54883c21631c089c14889d04889ca488975f848897df05dc30f1f4000
@192
memorydumper2.ClassWithPadding.f.materializeForSet : Swift.UInt32 0x10000c1f0 (32 bytes)554889e54883c21831c089c14889d04889ca488975f848897df05dc30f1f4000
@216
memorydumper2.ClassWithPadding.g.getter : Swift.UInt8 0x10000c210 (16 bytes)554889e548897df88a471c5dc30f1f00
@224
memorydumper2.ClassWithPadding.g.materializeForSet : Swift.UInt8 0x10000c240 (32 bytes)554889e54883c21c31c089c14889d04889ca488975f848897df05dc30f1f4000
@240
memorydumper2.ClassWithPadding.h.getter : Swift.UInt64 0x10000c260 (16 bytes)554889e548897df8488b47205dc36690
@248
memorydumper2.ClassWithPadding.h.materializeForSet : Swift.UInt64 0x10000c290 (32 bytes)554889e54883c22031c089c14889d04889ca488975f848897df05dc30f1f4000
@264
memorydumper2.ClassWithPadding.init () -> memorydumper2.ClassWithPadding 0x10000c2b0 (64 bytes)554889e5c6471001c6471102c647120366c747140400c6471605c7471806000000c6471c0748c74720080000004889f85dc366666666662e0f1f840000000000
Strings:fffff.
@272
unknown 0x101700c54 (128 bytes)07000000a86d3c00010000000000000000000000000000000000000000000000000000000000000000000000d8043d000100000000000000
0000000000000880...
unknown 0x101602754 (128 bytes)0700000028cb3c000100000050c63c0001000000000000000000000010cb3c000100000008d21a0101000000000000000000000000000000
0000000000000880...
OBJC_METACLASS_$_SwiftObject 0x1003cfd58 (40 bytes)58fd3c000100000030fd3c0001000000d02760010100000003000000010000005427600101000000
@32
@0
@8
malloc 0x1016027d0 (80 bytes)00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033db5996ff7f0000
c0cd330001000000...
@16
unknown 0x100000003 (128 bytes)fe0700000103000080020000001900000058120000850021000000000019000000480000005f5f504147455a45524f000000000000000000
0000000000000000...Strings:
__PAGEZERO__TEXT
@24@0
@16
unknown 0x101602794 (128 bytes)0000000060cf3c000100000070cb3c000100000018cf3c000100000010cb3c000100000098d11a0101000000000000000000000000000000
0000000000000000...
@32 @48
@72
+[SwiftObject class] 0x10033cdc0 (16 bytes)4889f8c36666662e0f1f840000000000
Strings:fff.
@56
malloc 0x101700cd0 (80 bytes)00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033db5996ff7f0000
c0cd330001000000...
@48
@72
@56
@32@0 @8
@24 @16
unknown 0x100000001 (128 bytes)faedfe0700000103
000080020000001900000058120000850021000000000019000000480000005f5f504147455a45524f00000000000000
0000000000000000...Strings:
__PAGEZERO__TEXT
@120
class ClassWithPadding { var a: UInt8 = 1 var b: UInt8 = 2 var c: UInt8 = 3 var d: UInt16 = 4 var e: UInt8 = 5 var f: UInt32 = 6 var g: UInt8 = 7 var h: UInt64 = 8}
![Page 62: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/62.jpg)
Swift Types
class (isa)
retain counts
stored properties
stored properties
Object
![Page 63: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/63.jpg)
Swift Types
class (isa)
retain counts
stored properties
stored properties
Object
strong count weak count
![Page 64: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/64.jpg)
Swift Types
class (isa)
retain counts
stored properties
stored properties
Object
class (isa)
Class
![Page 65: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/65.jpg)
Swift Types
11001isa10011
retain counts
stored properties
stored properties
Object
class (isa)
Class
![Page 66: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/66.jpg)
CreateStringFromFileSystemRepresentationByAddingPercentEscapes.hexchars 0x7fff9659db33 (128 bytes)636c6173730069734b696e644f66436c6173733a0073657453656c6563743a00736574433a007365744d3a00736574466163746f723a0073
65744e756d4b6579...Strings:
classisKindOfClass:
setSelect:setC:setM:
setFactor:setNumKey:
setSeeds:setG:
setRankTable:setKeys2:
setKeyLen:setSubShare
Instance of memorydumper2.ClassWithPadding 0x101700c00 (48 bytes)00063d000100000004000000020000000102030004000500060000000700000008000000000000004f00171000000300
ObjC class memorydumper2.ClassWithPadding 0x1003d0600 (344 bytes)c8053d000100000030fd3c0001000000e02d018aff7f0000
0000000000000000950c70010100000003000000000000002800000007000000
6801000010000000...
@0
memorydumper2.ClassWithPadding.a.setter : Swift.UInt8 0x10000c050 (32 bytes)554889e54088f88845f8488975f08846105dc3666666662e0f1f840000000000
Strings:ffff.
@88
memorydumper2.ClassWithPadding.d.getter : Swift.UInt16 0x10000c130 (16 bytes)554889e548897df8668b47145dc36690
@152
memorydumper2.ClassWithPadding.b.setter : Swift.UInt8 0x10000c0a0 (32 bytes)554889e54088f88845f8488975f08846115dc3666666662e0f1f840000000000
Strings:ffff.
@112
memorydumper2.ClassWithPadding.d.materializeForSet : Swift.UInt16 0x10000c160 (32 bytes)554889e54883c21431c089c14889d04889ca488975f848897df05dc30f1f4000
@168
memorydumper2.ClassWithPadding.f.getter : Swift.UInt32 0x10000c1d0 (16 bytes)554889e548897df88b47185dc30f1f00
@200
memorydumper2.ClassWithPadding.f.setter : Swift.UInt32 0x10000c1e0 (16 bytes)554889e5897df8488975f0897e185dc3
@208
ObjC class SwiftObject 0x1003cfd30 (40 bytes)58fd3c00010000000000000000000000e02d018aff7f0000
00000000000000009427600101000000
@8
memorydumper2.ClassWithPadding.g.setter : Swift.UInt8 0x10000c220 (32 bytes)554889e54088f88845f8488975f088461c5dc3666666662e0f1f840000000000
Strings:ffff.
@232
memorydumper2.ClassWithPadding.h.setter : Swift.UInt64 0x10000c270 (32 bytes)554889e548897df8488975f048897e205dc366666666662e0f1f840000000000
Strings:fffff.
@256
memorydumper2.ClassWithPadding.e.getter : Swift.UInt8 0x10000c180 (16 bytes)554889e548897df88a47165dc30f1f00
@176
memorydumper2.ClassWithPadding.c.getter : Swift.UInt8 0x10000c0e0 (16 bytes)554889e548897df88a47125dc30f1f00
@128
_objc_empty_cache 0x7fff8a012de0 (128 bytes)0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000...
@16
unknown 0x101700c95 (128 bytes)000000f86e3c0001000000000000000000000000000000000000000000000000000000000000000000000010053d00010000000000000000
0000000000000000...
@32
memorydumper2.ClassWithPadding.c.setter : Swift.UInt8 0x10000c0f0 (32 bytes)554889e54088f88845f8488975f08846125dc3666666662e0f1f840000000000
Strings:ffff.
@136
metaclass for memorydumper2.ClassWithPadding 0x1003d05c8 (40 bytes)58fd3c000100000058fd3c0001000000d00c7001010000000300000001000000540c700101000000
@0
memorydumper2.ClassWithPadding.a.getter : Swift.UInt8 0x10000c040 (16 bytes)554889e548897df88a47105dc30f1f00
@80
memorydumper2.ClassWithPadding.a.materializeForSet : Swift.UInt8 0x10000c070 (32 bytes)554889e54883c21031c089c14889d04889ca488975f848897df05dc30f1f4000
@96
memorydumper2.ClassWithPadding.b.getter : Swift.UInt8 0x10000c090 (16 bytes)554889e548897df88a47115dc30f1f00
@104
memorydumper2.ClassWithPadding.b.materializeForSet : Swift.UInt8 0x10000c0c0 (32 bytes)554889e54883c21131c089c14889d04889ca488975f848897df05dc30f1f4000
@120
memorydumper2.ClassWithPadding.c.materializeForSet : Swift.UInt8 0x10000c110 (32 bytes)554889e54883c21231c089c14889d04889ca488975f848897df05dc30f1f4000
@144
memorydumper2.ClassWithPadding.d.setter : Swift.UInt16 0x10000c140 (32 bytes)554889e56689f8668945f8488975f0668946145dc366662e0f1f840000000000
@160
memorydumper2.ClassWithPadding.e.setter : Swift.UInt8 0x10000c190 (32 bytes)554889e54088f88845f8488975f08846165dc3666666662e0f1f840000000000
Strings:ffff.
@184
memorydumper2.ClassWithPadding.e.materializeForSet : Swift.UInt8 0x10000c1b0 (32 bytes)554889e54883c21631c089c14889d04889ca488975f848897df05dc30f1f4000
@192
memorydumper2.ClassWithPadding.f.materializeForSet : Swift.UInt32 0x10000c1f0 (32 bytes)554889e54883c21831c089c14889d04889ca488975f848897df05dc30f1f4000
@216
memorydumper2.ClassWithPadding.g.getter : Swift.UInt8 0x10000c210 (16 bytes)554889e548897df88a471c5dc30f1f00
@224
memorydumper2.ClassWithPadding.g.materializeForSet : Swift.UInt8 0x10000c240 (32 bytes)554889e54883c21c31c089c14889d04889ca488975f848897df05dc30f1f4000
@240
memorydumper2.ClassWithPadding.h.getter : Swift.UInt64 0x10000c260 (16 bytes)554889e548897df8488b47205dc36690
@248
memorydumper2.ClassWithPadding.h.materializeForSet : Swift.UInt64 0x10000c290 (32 bytes)554889e54883c22031c089c14889d04889ca488975f848897df05dc30f1f4000
@264
memorydumper2.ClassWithPadding.init () -> memorydumper2.ClassWithPadding 0x10000c2b0 (64 bytes)554889e5c6471001c6471102c647120366c747140400c6471605c7471806000000c6471c0748c74720080000004889f85dc366666666662e0f1f840000000000
Strings:fffff.
@272
unknown 0x101700c54 (128 bytes)07000000a86d3c00010000000000000000000000000000000000000000000000000000000000000000000000d8043d000100000000000000
0000000000000880...
unknown 0x101602754 (128 bytes)0700000028cb3c000100000050c63c0001000000000000000000000010cb3c000100000008d21a0101000000000000000000000000000000
0000000000000880...
OBJC_METACLASS_$_SwiftObject 0x1003cfd58 (40 bytes)58fd3c000100000030fd3c0001000000d02760010100000003000000010000005427600101000000
@32
@0
@8
malloc 0x1016027d0 (80 bytes)00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033db5996ff7f0000
c0cd330001000000...
@16
unknown 0x100000003 (128 bytes)fe0700000103000080020000001900000058120000850021000000000019000000480000005f5f504147455a45524f000000000000000000
0000000000000000...Strings:
__PAGEZERO__TEXT
@24@0
@16
unknown 0x101602794 (128 bytes)0000000060cf3c000100000070cb3c000100000018cf3c000100000010cb3c000100000098d11a0101000000000000000000000000000000
0000000000000000...
@32 @48
@72
+[SwiftObject class] 0x10033cdc0 (16 bytes)4889f8c36666662e0f1f840000000000
Strings:fff.
@56
malloc 0x101700cd0 (80 bytes)00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033db5996ff7f0000
c0cd330001000000...
@48
@72
@56
@32@0 @8
@24 @16
unknown 0x100000001 (128 bytes)faedfe0700000103
000080020000001900000058120000850021000000000019000000480000005f5f504147455a45524f00000000000000
0000000000000000...Strings:
__PAGEZERO__TEXT
@120
Objective-C Classeshttp://opensource.apple.com/source/objc4/
runtime.h
![Page 67: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/67.jpg)
Objective-C Classes Class isa Class super_class const char *name long version long info long instance_size struct objc_ivar_list *ivars struct objc_method_list **methodLists struct objc_cache *cache struct objc_protocol_list *protocols
![Page 68: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/68.jpg)
Swift Classes
uint32_t flags; uint32_t instanceAddressOffset; uint32_t instanceSize; uint16_t instanceAlignMask; uint16_t reserved;
uint32_t classSize; uint32_t classAddressOffset; void *description;
![Page 69: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/69.jpg)
Swift Classes
class (isa)
...
...
Method 1
Class
Method 2
Method 3
Method 4
![Page 70: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/70.jpg)
Method Calls
class (isa)
...
...
Method 1
Method 2
Method 3
Method 4
obj.method()
class = obj->isamethodf = class[method_offset]methodf(obj)
![Page 71: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/71.jpg)
Subclassesclass DeepClassSuper1 { var a = 1}class DeepClassSuper2: DeepClassSuper1 { var b = 2}class DeepClassSuper3: DeepClassSuper2 { var c = 3}class DeepClass: DeepClassSuper3 { var d = 4}
![Page 72: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/72.jpg)
Subclasses
memorydumper2.DeepClassSuper1.init () -> memorydumper2.DeepClassSuper1 0x10000c400 (32 bytes)554889e548c74710010000004889f85dc36666666666662e0f1f840000000000
Strings:ffffff.
CreateStringFromFileSystemRepresentationByAddingPercentEscapes.hexchars 0x7fff9659db33 (128 bytes)636c6173730069734b696e644f66436c6173733a0073657453656c6563743a00736574433a007365744d3a00736574466163746f723a0073
65744e756d4b6579...Strings:
classisKindOfClass:
setSelect:setC:setM:
setFactor:setNumKey:
setSeeds:setG:
setRankTable:setKeys2:
setKeyLen:setSubShare
ObjC class memorydumper2.DeepClass 0x1003d0a00 (216 bytes)c8093d000100000010093d0001000000e02d018aff7f0000
0000000000000000651020010100000003000000000000003000000007000000
e800000010000000...
metaclass for memorydumper2.DeepClass 0x1003d09c8 (40 bytes)58fd3c0001000000d8083d000100000060112001010000000300000001000000b40d200101000000
@0
ObjC class memorydumper2.DeepClassSuper3 0x1003d0910 (184 bytes)d8083d000100000040083d0001000000e02d018aff7f0000
0000000000000000a51020010100000003000000000000002800000007000000
c800000010000000...
@8
_objc_empty_cache 0x7fff8a012de0 (128 bytes)0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000...
@16
unknown 0x101201065 (128 bytes)000000d8713c0001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000088000...
@32
memorydumper2.DeepClassSuper1.a.getter : Swift.Int 0x10000c3b0 (16 bytes)554889e548897df8488b47105dc36690
@80
memorydumper2.DeepClassSuper1.a.setter : Swift.Int 0x10000c3c0 (32 bytes)554889e548897df8488975f048897e105dc366666666662e0f1f840000000000
Strings:fffff.
@88
memorydumper2.DeepClassSuper1.a.materializeForSet : Swift.Int 0x10000c3e0 (32 bytes)554889e54883c21031c089c14889d04889ca488975f848897df05dc30f1f4000
@96
memorydumper2.DeepClass.init () -> memorydumper2.DeepClass 0x10000c720 (48 bytes)554889e54883ec1048897df848c7472804000000e8d7feffff488945f84883c4105dc3666666662e0f1f840000000000
Strings:ffff.
@104
memorydumper2.DeepClassSuper2.b.getter : Swift.Int 0x10000c4b0 (16 bytes)554889e548897df8488b47185dc36690
@120
memorydumper2.DeepClassSuper2.b.setter : Swift.Int 0x10000c4c0 (32 bytes)554889e548897df8488975f048897e185dc366666666662e0f1f840000000000
Strings:fffff.
@128
memorydumper2.DeepClassSuper2.b.materializeForSet : Swift.Int 0x10000c4e0 (32 bytes)554889e54883c21831c089c14889d04889ca488975f848897df05dc30f1f4000
@136
memorydumper2.DeepClassSuper3.c.getter : Swift.Int 0x10000c5c0 (16 bytes)554889e548897df8488b47205dc36690
@152
memorydumper2.DeepClassSuper3.c.setter : Swift.Int 0x10000c5d0 (32 bytes)554889e548897df8488975f048897e205dc366666666662e0f1f840000000000
Strings:fffff.
@160
memorydumper2.DeepClassSuper3.c.materializeForSet : Swift.Int 0x10000c5f0 (32 bytes)554889e54883c22031c089c14889d04889ca488975f848897df05dc30f1f4000
@168memorydumper2.DeepClass.d.getter : Swift.Int 0x10000c6d0 (16 bytes)
554889e548897df8488b47285dc36690
@184
memorydumper2.DeepClass.d.setter : Swift.Int 0x10000c6e0 (32 bytes)554889e548897df8488975f048897e285dc366666666662e0f1f840000000000
Strings:fffff.
@192
memorydumper2.DeepClass.d.materializeForSet : Swift.Int 0x10000c700 (32 bytes)554889e54883c22831c089c14889d04889ca488975f848897df05dc30f1f4000
@200
metaclass for memorydumper2.DeepClassSuper3 0x1003d08d8 (40 bytes)58fd3c000100000008083d0001000000e02d018aff7f0000
0000000000000000f40d200101000000
@8
OBJC_METACLASS_$_SwiftObject 0x1003cfd58 (40 bytes)58fd3c000100000030fd3c0001000000e00670010100000003000000010000006406700101000000
@0
unknown 0x101200db4 (128 bytes)0700000068713c00010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000008a0...
@32
unknown 0x100000003 (128 bytes)fe0700000103000080020000001900000058120000850021000000000019000000480000005f5f504147455a45524f000000000000000000
0000000000000000...Strings:
__PAGEZERO__TEXT
@24
malloc 0x101201160 (80 bytes)00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033db5996ff7f0000
c0cd330001000000...
@16
@16
@80 @88 @96
@120 @128 @136
@152 @160@168@0
ObjC class memorydumper2.DeepClassSuper2 0x1003d0840 (152 bytes)08083d000100000090073d0001000000e02d018aff7f0000
0000000000000000e51020010100000003000000000000002000000007000000
a800000010000000...
@8
unknown 0x1012010a5 (128 bytes)00000020713c0001000000000000000000000000000000000000000000000000000000000a3d000100000000000000000000000000000000
0000000000088000...
@32
memorydumper2.DeepClassSuper3.init () -> memorydumper2.DeepClassSuper3 0x10000c610 (48 bytes)554889e54883ec1048897df848c7472003000000e8d7feffff488945f84883c4105dc3666666662e0f1f840000000000
Strings:ffff.
@104
malloc 0x1017006e0 (80 bytes)00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033db5996ff7f0000
c0cd330001000000...
@48
@72
+[SwiftObject class] 0x10033cdc0 (16 bytes)4889f8c36666662e0f1f840000000000
Strings:fff.
@56
@16@0
metaclass for memorydumper2.DeepClassSuper2 0x1003d0808 (40 bytes)58fd3c000100000058073d0001000000e02d018aff7f0000
0000000000000000340e200101000000
@8
unknown 0x101200df4 (128 bytes)07000000b0703c0001000000000000000000000000000000000000000000000000000000c8093d0001000000000000000000000000000000
00000000000008a0...
@32
@16
@80 @88 @96
@120 @128 @136@0
ObjC class memorydumper2.DeepClassSuper1 0x1003d0790 (120 bytes)58073d000100000030fd3c0001000000e02d018aff7f0000
0000000000000000251120010100000003000000000000001800000007000000
8800000010000000...
@8
unknown 0x1012010e5 (128 bytes)00000068703c000100000000000000000000000000000000000000000000000000000010093d000100000000000000000000000000000000
0000000000088000...
@32
memorydumper2.DeepClassSuper2.init () -> memorydumper2.DeepClassSuper2 0x10000c500 (48 bytes)554889e54883ec1048897df848c7471802000000e8e7feffff488945f84883c4105dc3666666662e0f1f840000000000
Strings:ffff.
@104
Instance of memorydumper2.DeepClass 0x101200c90 (48 bytes)000a3d000100000004000000020000000100000000000000020000000000000003000000000000000400000000000000
@0
@16
@0
ObjC class SwiftObject 0x1003cfd30 (40 bytes)58fd3c00010000000000000000000000e02d018aff7f0000
0000000000000000a406700101000000
@8
@24
unknown 0x101700664 (128 bytes)0700000028cb3c000100000050c63c0001000000000000000000000010cb3c000100000008d21a0101000000000000000000000000000000
0000000000000880...
@32
@16@0
metaclass for memorydumper2.DeepClassSuper1 0x1003d0758 (40 bytes)58fd3c000100000058fd3c0001000000e02d018aff7f0000
0000000000000000740e200101000000
@8
unknown 0x101200e34 (128 bytes)07000000f86f3c0001000000000000000000000000000000000000000000000000000000d8083d0001000000000000000000000000000000
00000000000008a0...
@32
@16@0
unknown 0x1017006a4 (128 bytes)0000000060cf3c000100000070cb3c000100000018cf3c000100000010cb3c000100000098d11a0101000000000000000000000000000000
0000000000000000...
@32
unknown 0x100000001 (128 bytes)faedfe0700000103
000080020000001900000058120000850021000000000019000000480000005f5f504147455a45524f00000000000000
0000000000000000...Strings:
__PAGEZERO__TEXT
@16@0@8
unknown 0x101200e74 (128 bytes)07000000406f3c000100000000000000000000000000000000000000000000000000000008083d0001000000c8053d000100000000000000
0000000000000000...
@32
unknown 0x101201125 (128 bytes)000000b06f3c000100000000000000000000000000000000000000000000000000000040083d000100000000063d00010000000000000000
0000000000000000...
@104
@16
@80 @88 @96@8@0 @32
@120
@48 @56
@72
![Page 73: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/73.jpg)
Arrays[1, 2, 3, 4, 5]
![Page 74: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/74.jpg)
Arrays[1, 2, 3, 4, 5]
Swift._ContiguousArrayStorage1._withVerbatimBridgedUnsafeBuffer <A> ((Swift.UnsafeBufferPointer<Swift.AnyObject>) throws -> A) throws -> A? 0x1000f7a30 (592 bytes)554889e54157415641554154534883ec784c894d804c898578ffffff4989cd48
8955904889b570ffffff4889fb4c896d
d0488d3dc84a2f00488d75d0e88f790b...
Strings:AWAVAUATSH
T$XIx[A\A]A^A_]
ffffff.
Swift._ContiguousArrayStorageBase.withUnsafeBufferOfObjects <A> ((Swift.UnsafeBufferPointer<Swift.AnyObject>) throws -> A) throws -> A 0x1000f7570 (464 bytes)554889e54157415641554154534883ec584d89cc4d89c748894d984989d64989f548897da048894dd0488d3d904f2f00488d75d0e8577e0b
00488945a8488b48...Strings:
AWAVAUATSHX[A\A]A^A_]
ffff.
Instance of Swift._ContiguousArrayStorage<Swift.Int> 0x101501650 (80 bytes)40c31a0101000000080000000200000005000000000000000a00000000000000010000000000000002000000000000000300000000000000
0400000000000000...
ObjC class Swift._ContiguousArrayStorage<Swift.Int> 0x1011ac340 (128 bytes)e0c31a010100000098f63c0001000000e02d018aff7f0000
0000000000000000d51550010100000003000000000000001000000007000000
a800000010000000...
@0
@96 @88
ObjC class Swift._ContiguousArrayStorage1 0x1003cf698 (144 bytes)386d3e000100000008fc3c0001000000e02d018aff7f0000
0000000000000000a5c920010100000003000000000000001000000007000000
a000000010000000...
@8
swift_deletedMethodError 0x100329c40 (32 bytes)554889e5488d35826a030031ff31c0e84cffffff90909090
9090909090909090
@120
unknown 0x1011ac3e0 (128 bytes)18d1eb79ff7f0000
386d3e0001000000e02d018aff7f0000
0000000000000000141650010100000080000000100000001000000000000000
0000000000000000...
@0
Swift._ContiguousArrayStorage.init () -> Swift._ContiguousArrayStorage<A> 0x1000f88a0 (16 bytes)554889e54889f85dc30f1f8000000000
@80
Swift._ContiguousArrayStorage._getNonVerbatimBridgedHeapBuffer () -> Swift._HeapBuffer<Swift.Int, Swift.AnyObject> 0x1000f8250 (496 bytes)554889e54157415641554154534883ec5848897db0488b07488b5f1048895da84c8ba090000000488b3de2af2f004885ff7555488b05767e
2d004885c0752048...Strings:
AWAVAUATSHX[A\A]A^A_]
@112
unknown 0x1015015d5 (128 bytes)00000008c41a010100000030993c0001000000000000000000000000000000000000000000000000000000b8c11a01010000000000000000
0000000000088007...
@32
_objc_empty_cache 0x7fff8a012de0 (128 bytes)0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000...
@16
Swift._ContiguousArrayStorage._getNonVerbatimBridgedCount () -> Swift.Int 0x1000f8240 (16 bytes)554889e5488b47105dc3660f1f440000
@104
unknown 0x7fff5fbff280 (8 bytes)5016500101000000
@0
![Page 75: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/75.jpg)
Protocols
protocol P { func f() func g() func h()}
struct ProtocolHolder { var a: P var b: P var c: P}
![Page 76: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/76.jpg)
Protocols
struct StructSmallP: P { func f() {} func g() {} func h() {} var a = 0x6c6c616d73 // "small"}
![Page 77: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/77.jpg)
Protocolsstruct StructBigP: P { func f() {} func g() {} func h() {} var a = 0x656772616c // "large" var b = 0x1010101010101010 var c = 0x2020202020202020 var d = 0x3030303030303030}
![Page 78: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/78.jpg)
Protocolsstruct ClassP: P { func f() {} func g() {} func h() {} var a = 0x7373616c63 // "class" var b = 0x4040404040404040 var c = 0x5050505050505050 var d = 0x6060606060606060}
![Page 79: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/79.jpg)
Protocols
let holder = ProtocolHolder( a: StructSmallP(), b: StructBigP(), c: ClassP())
![Page 80: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/80.jpg)
Protocols
protocol witness for Swift._ArrayBufferProtocol.requestUniqueMutableBackingBuffer (minimumCapacity : Swift.Int) -> Swift._ContiguousArrayBuffer<A.Element>? in conformance <A> Swift._ArrayBuffer<A> : Swift._ArrayBufferProtocol in Swift 0x100073500 (32 bytes)554889e54889f04889d64889c25de90d000000666666662e0f1f840000000000
Strings:ffff.
unknown 0x1011d7028 (128 bytes)10801d010100000028a01d010100000020672f0001000000d0932b000100000010942b0001000000601218000100000050942b0001000000
70942b0001000000...
Swift._ContiguousArrayStorage.__deallocating_deinit 0x1000f7e30 (96 bytes)554889e553504889fb488b03488b7310488b9090000000488b42f8488bb8900000000fb7cf4883c1204881cf0000ffff4881f7ffff000048
21cf4801dfff5068...
protocol witness for Swift._ArrayBufferProtocol.replace <A where A1: Swift.Collection, A.Element == A1.Iterator.Element> (subRange : Swift.Range<Swift.Int>, with : Swift.Int, elementsOf : A1) -> () in conformance <A> Swift._ArrayBuffer<A> : Swift._ArrayBufferProtocol in Swift 0x100073bd0 (112 bytes)554889e54157415641554154534883ec284d89cd4c8945d04989cf4989d44889f34989fe488b7518488d3d9936360031d2e84a552400488b
4d1048894c24104c...Strings:
AWAVAUATSH([A\A]A^A_]
Swift._ContiguousArrayStorage.init () -> Swift._ContiguousArrayStorage<A> 0x1000f88a0 (16 bytes)554889e54889f85dc30f1f8000000000
protocol witness table for memorydumper2.ClassP : memorydumper2.P in memorydumper2 0x10039ca90 (24 bytes)90cf000001000000e0cf00000100000030d0000001000000
protocol witness for memorydumper2.P.f () -> () in conformance memorydumper2.ClassP : memorydumper2.P in memorydumper2 0x10000cf90 (80 bytes)554889e54883ec30488d45e0488b0f4c8b47084c8b4f10488b7f1848894de04c8945e84c894df048897df84889c7488975d8488955d0e805fdffff4883c4305d...
Strings:ffffff.
@0
protocol witness for memorydumper2.P.g () -> () in conformance memorydumper2.ClassP : memorydumper2.P in memorydumper2 0x10000cfe0 (80 bytes)554889e54883ec30488d45e0488b0f4c8b47084c8b4f10488b7f1848894de04c8945e84c894df048897df84889c7488975d8488955d0e8e5fcffff4883c4305d...
Strings:ffffff.
@8
protocol witness for memorydumper2.P.h () -> () in conformance memorydumper2.ClassP : memorydumper2.P in memorydumper2 0x10000d030 (80 bytes)554889e54883ec30488d45e0488b0f4c8b47084c8b4f10488b7f1848894de04c8945e84c894df048897df84889c7488975d8488955d0e8c5fcffff4883c4305d...
Strings:ffffff.
@16
type metadata accessor for Swift.CountableRange<Swift.Int> 0x100181260 (64 bytes)488b05c11c25004885c0752d554889e5488d3db1b12300488d357acf2200488d15b3d02200488d0de4d02200e88fc21000488905901c25005dc3660f1f440000
Strings:u-UH
unknown 0x1011d0008 (128 bytes)000000000000000020101d010100000028701d0101000000601218000100000030802a0001000000b0702f0001000000c02c070001000000
f02c070001000000...
@96 @16 @120 @24
unknown 0x1011d1020 (128 bytes)18201d010100000038501d010100000010672f000100000030932b000100000060402f0001000000a0402f00010000002040300001000000a0e72f0001000000...
@8
lazy protocol witness table accessor for type Swift.CountableRange<Swift.Int> and conformance <A where A: Swift.Comparable, A: Swift._Strideable, A.Stride: Swift.SignedInteger> Swift.CountableRange<A> : Swift.RandomAccessCollection in Swift 0x1002a8030 (32 bytes)554889e5488d3d5dbb1200488d35866213005de9781701000f1f840000000000
@32
associated type metadata accessor for Element in <A> Swift._ArrayBuffer<A> : Swift._ArrayBufferProtocol in Swift 0x1002f70b0 (16 bytes)554889e55de93681fcff660f1f440000
@40
protocol witness for Swift._ArrayBufferProtocol.init () -> A in conformance <A> Swift._ArrayBuffer<A> : Swift._ArrayBufferProtocol in Swift 0x100072cc0 (48 bytes)554889e553504889fbe842f2fcff488d
05031038004889034889d84883c4085b5dc366666666662e0f1f840000000000
Strings:fffff.
@48
protocol witness for Swift._ArrayBufferProtocol.init (Swift._ContiguousArrayBuffer<A.Element>, shiftedToStartIndex : Swift.Int) -> A in conformance <A> Swift._ArrayBuffer<A> : Swift._ArrayBufferProtocol in Swift 0x100072cf0 (32 bytes)554889e553504889fb4889f7e80f0000
004889034889d84883c4085b5dc36690
@56
protocol witness for Swift._ArrayBufferProtocol._copyContents (subRange : Swift.Range<Swift.Int>, initializing : Swift.UnsafeMutablePointer<A.Element>) -> Swift.UnsafeMutablePointer<A.Element> in conformance <A> Swift._ArrayBuffer<A> : Swift._ArrayBufferProtocol in Swift 0x100072d20 (96 bytes)554889e5415741564155415453504989d64989f74989fc488b194d8b68204889dfe82aa92c004c89e74c89fe4c89f24889d94d89e8e89600
00004989c64889df...Strings:
AWAVAUATSPI[A\A]A^A_]
@64
protocol witness for Swift._ArrayBufferProtocol.subscript.getter : (Swift.Int) -> A.Element in conformance <A> Swift._ArrayBuffer<A> : Swift._ArrayBufferProtocol in Swift 0x1000731a0 (80 bytes)554889e5415741564154534989f64989ff488b1a4c8b61204889dfe8b0a42c004c89ff4c89f64889da4c89e1e87ff7fcff4889dfe837a52c
004c89f85b415c41...Strings:
AWAVATSI[A\A^A_]
@72
protocol witness for Swift._ArrayBufferProtocol.subscript.setter : (Swift.Int) -> A.Element in conformance <A> Swift._ArrayBuffer<A> : Swift._ArrayBufferProtocol in Swift 0x100073450 (80 bytes)554889e5415741564154534989f64989ff488b1a4c8b61204889dfe800a22c004c89ff4c89f64889da4c89e1e8bf31fdff4889df5b415c41
5e415f5de97fa22c...Strings:
AWAVATSI[A\A^A_]
ffffff.
@80
protocol witness for Swift._ArrayBufferProtocol.subscript.materializeForSet : (Swift.Int) -> A.Element in conformance <A> Swift._ArrayBuffer<A> : Swift._ArrayBufferProtocol in Swift 0x1000734a0 (96 bytes)554889e5415741564155415453504989d64989f74989fc488b194d8b68204889dfe8aaa12c004c89e74c89fe4c89f24889d94d89e8e8b63bfdff4989c64989d7...
Strings:AWAVAUATSPI
[A\A]A^A_]
@88
protocol witness for Swift._ArrayBufferProtocol.isMutableAndUniquelyReferenced () -> Swift.Bool in conformance <A> Swift._ArrayBuffer<A> : Swift._ArrayBufferProtocol in Swift 0x100073620 (32 bytes)554889e54889f84889f74889c65de9fd020000666666662e0f1f840000000000
Strings:ffff.
@104
protocol witness for Swift._ArrayBufferProtocol.requestNativeBuffer () -> Swift._ContiguousArrayBuffer<A.Element>? in conformance <A> Swift._ArrayBuffer<A> : Swift._ArrayBufferProtocol in Swift 0x100073b20 (64 bytes)554889e5415653488b1f4c8b76204889dfe83a9b2c004889df4c89f6e81f0000004989c64889dfe8c49b2c004c89f05b415e5dc36666662e0f1f840000000000
Strings:AVSH[A^]fff.
@112
value witness table for Builtin.UnknownObject 0x1003c5908 (184 bytes)90c3320001000000a0c3320001000000c0c3320001000000d0c3320001000000e0c3320001000000f0c332000100000010c4320001000000
30c4320001000000...
type metadata for memorydumper2.StructBigP 0x10039d318 (56 bytes)0100000000000000
08d2faffffffffff00000000000000000000000000000000080000000000000010000000000000001800000000000000
_objc_empty_cache 0x7fff8a012de0 (128 bytes)0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000...
protocol witness for memorydumper2.P.f () -> () in conformance memorydumper2.StructSmallP : memorydumper2.P in memorydumper2 0x10000c8c0 (32 bytes)554889e54883ec10488b3f488975f8488955f0e838ffffff
4883c4105dc36690
type metadata for memorydumper2.MemoryRegion.Child 0x1003d03f8 (40 bytes)0100000000000000
089af7ffffffffff28033d000100000000000000000000000800000000000000
protocol witness for memorydumper2.P.g () -> () in conformance memorydumper2.StructBigP : memorydumper2.P in memorydumper2 0x10000cc30 (80 bytes)554889e54883ec30488d45e0488b0f4c8b47084c8b4f10488b7f1848894de04c8945e84c894df048897df84889c7488975d8488955d0e8e5fcffff4883c4305d...
Strings:ffffff.
type metadata for memorydumper2.ClassP 0x10039d3f8 (56 bytes)0100000000000000
78d1faffffffffff00000000000000000000000000000000080000000000000010000000000000001800000000000000
protocol witness table for memorydumper2.StructBigP : memorydumper2.P in memorydumper2 0x10039ca78 (24 bytes)e0cb00000100000030cc00000100000080cc000001000000
@8
protocol witness for memorydumper2.P.f () -> () in conformance memorydumper2.StructBigP : memorydumper2.P in memorydumper2 0x10000cbe0 (80 bytes)554889e54883ec30488d45e0488b0f4c8b47084c8b4f10488b7f1848894de04c8945e84c894df048897df84889c7488975d8488955d0e805fdffff4883c4305d...
Strings:ffffff.
@0
protocol witness for memorydumper2.P.h () -> () in conformance memorydumper2.StructBigP : memorydumper2.P in memorydumper2 0x10000cc80 (80 bytes)554889e54883ec30488d45e0488b0f4c8b47084c8b4f10488b7f1848894de04c8945e84c894df048897df84889c7488975d8488955d0e8c5fcffff4883c4305d...
Strings:ffffff.
@16
malloc 0x10140c330 (32 bytes)636c617373000000404040404040404050505050505050506060606060606060
Strings:class
@@@@@@@@PPPPPPPP````````
value witness table for Swift._ArrayBuffer 0x1003b95e0 (216 bytes)7058300001000000d0e22f0001000000a0f300000100000080e30000010000005058300001000000b0e22f0001000000d0da2f0001000000
702a300001000000...
unknown 0x1011ac568 (128 bytes)18d1eb79ff7f0000
386d3e0001000000e02d018aff7f0000
0000000000000000c4c840010100000080000000100000001000000000000000
0000000000000000...
unknown 0x10140c885 (128 bytes)00000090c51a010100000030993c000100000000000000000000000000000000000000000000000000000040c31a01010000000000000000
0000000000088007...
unknown 0x1011d00f8 (128 bytes)08001d0101000000a0101d010100000090701d0101000000601218000100000030802a0001000000b0702f0001000000c02c070001000000
f02c070001000000...
generic type metadata pattern for Swift.IteratorOverOne 0x1003f0045 (323 bytes)0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000...
unknown 0x1011ac4a0 (128 bytes)18c31a0101000000c8c41a01010000000100000000000000307e0f000100000008593c000100000068c51a010100000098f63c0001000000e02d018aff7f0000...
@24 @120 @32 @56 @40 @72
unknown 0x1011ac318 (128 bytes)90c11a010100000040c31a01010000000100000000000000307e0f000100000008593c0001000000e0c31a010100000098f63c0001000000e02d018aff7f0000...
@0
ObjC class Swift._ContiguousArrayStorage<Swift.UInt8> 0x1011ac4c8 (128 bytes)68c51a010100000098f63c0001000000e02d018aff7f0000
000000000000000085c840010100000003000000000000001000000007000000
a800000010000000...
@8
ObjC class Swift._ContiguousArrayStorage1 0x1003cf698 (144 bytes)386d3e000100000008fc3c0001000000e02d018aff7f0000
0000000000000000b58d40010100000003000000000000001000000007000000
a000000010000000...
@48
unknown 0x10140c3b0 (128 bytes)fe8debdc06c7c5ee
0100000001000000a0c41a010100000020bd3b00010000000000000000000000e06f3001010000008f2376928ecfc543
0100000001740000...Strings:ZTUMZTUM
@64 @16
unknown 0x100000001 (128 bytes)faedfe0700000103
000080020000001900000058120000850021000000000019000000480000005f5f504147455a45524f00000000000000
0000000000000000...Strings:
__PAGEZERO__TEXT
@8
type metadata for Swift.UInt8 0x1003bbd20 (32 bytes)0100000000000000
f833f9ffffffffff00000000000000000000000000000000
@24
malloc 0x101306fe0 (48 bytes)00000000000000000000000000000000f934ed8b8ecfc5e1
0100000001000000f8001d010100000080f01c0101000000
@40
unknown 0x1011cf028 (128 bytes)0100000000000000
28ef17ffffffffff0000000000000000000000000000000020bd3b00010000000000000000000000f8033d0001000000
08f01c0101000000...
@72
@32@24
unknown 0x1011cf080 (128 bytes)0100000000000000
d0ee17ffffffffff00000000000000000000000000000000f8033d000100000000000000000000000000000000000000
0000000000000000...
@40 @48 @120 @80 @32
unknown 0x1011cf008 (128 bytes)000000000000000028f01c01010000000100000000000000e0953b00010000000100000000000000
28ef17ffffffffff0000000000000000
0000000000000000...
@56@64
protocol witness for memorydumper2.P.h () -> () in conformance memorydumper2.StructSmallP : memorydumper2.P in memorydumper2 0x10000c900 (32 bytes)554889e54883ec10488b3f488975f8488955f0e818ffffff
4883c4105dc36690
type metadata for memorydumper2.StructSmallP 0x10039d250 (32 bytes)0100000000000000
78d2faffffffffff00000000000000000000000000000000
protocol witness for memorydumper2.P.g () -> () in conformance memorydumper2.StructSmallP : memorydumper2.P in memorydumper2 0x10000c8e0 (32 bytes)554889e54883ec10488b3f488975f8488955f0e828ffffff
4883c4105dc36690
malloc 0x10140c310 (32 bytes)6c61726765000000101010101010101020202020202020203030303030303030
Strings:large
00000000
protocol witness table for memorydumper2.StructSmallP : memorydumper2.P in memorydumper2 0x10039ca60 (24 bytes)c0c8000001000000e0c800000100000000c9000001000000
@0 @16 @8
malloc 0x10140c290 (120 bytes)736d616c6c0000000000000000000000470000000000000050d239000100000060ca39000100000010c340010100000045003f0001000000
ffffffffffffffff...Strings:small
@112 @64 @104 @72 @80 @48@88 @24 @40 @32
![Page 81: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/81.jpg)
protocol witness for Swift._ArrayBufferProtocol.requestUniqueMutableBackingBuffer (minimumCapacity : Swift.Int) -> Swift._ContiguousArrayBuffer<A.Element>? in conformance <A> Swift._ArrayBuffer<A> : Swift._ArrayBufferProtocol in Swift 0x100073500 (32 bytes)554889e54889f04889d64889c25de90d000000666666662e0f1f840000000000
Strings:ffff.
unknown 0x1011d7028 (128 bytes)10801d010100000028a01d010100000020672f0001000000d0932b000100000010942b0001000000601218000100000050942b0001000000
70942b0001000000...
Swift._ContiguousArrayStorage.__deallocating_deinit 0x1000f7e30 (96 bytes)554889e553504889fb488b03488b7310488b9090000000488b42f8488bb8900000000fb7cf4883c1204881cf0000ffff4881f7ffff000048
21cf4801dfff5068...
protocol witness for Swift._ArrayBufferProtocol.replace <A where A1: Swift.Collection, A.Element == A1.Iterator.Element> (subRange : Swift.Range<Swift.Int>, with : Swift.Int, elementsOf : A1) -> () in conformance <A> Swift._ArrayBuffer<A> : Swift._ArrayBufferProtocol in Swift 0x100073bd0 (112 bytes)554889e54157415641554154534883ec284d89cd4c8945d04989cf4989d44889f34989fe488b7518488d3d9936360031d2e84a552400488b
4d1048894c24104c...Strings:
AWAVAUATSH([A\A]A^A_]
Swift._ContiguousArrayStorage.init () -> Swift._ContiguousArrayStorage<A> 0x1000f88a0 (16 bytes)554889e54889f85dc30f1f8000000000
protocol witness table for memorydumper2.ClassP : memorydumper2.P in memorydumper2 0x10039ca90 (24 bytes)90cf000001000000e0cf00000100000030d0000001000000
protocol witness for memorydumper2.P.f () -> () in conformance memorydumper2.ClassP : memorydumper2.P in memorydumper2 0x10000cf90 (80 bytes)554889e54883ec30488d45e0488b0f4c8b47084c8b4f10488b7f1848894de04c8945e84c894df048897df84889c7488975d8488955d0e805fdffff4883c4305d...
Strings:ffffff.
@0
protocol witness for memorydumper2.P.g () -> () in conformance memorydumper2.ClassP : memorydumper2.P in memorydumper2 0x10000cfe0 (80 bytes)554889e54883ec30488d45e0488b0f4c8b47084c8b4f10488b7f1848894de04c8945e84c894df048897df84889c7488975d8488955d0e8e5fcffff4883c4305d...
Strings:ffffff.
@8
protocol witness for memorydumper2.P.h () -> () in conformance memorydumper2.ClassP : memorydumper2.P in memorydumper2 0x10000d030 (80 bytes)554889e54883ec30488d45e0488b0f4c8b47084c8b4f10488b7f1848894de04c8945e84c894df048897df84889c7488975d8488955d0e8c5fcffff4883c4305d...
Strings:ffffff.
@16
type metadata accessor for Swift.CountableRange<Swift.Int> 0x100181260 (64 bytes)488b05c11c25004885c0752d554889e5488d3db1b12300488d357acf2200488d15b3d02200488d0de4d02200e88fc21000488905901c25005dc3660f1f440000
Strings:u-UH
unknown 0x1011d0008 (128 bytes)000000000000000020101d010100000028701d0101000000601218000100000030802a0001000000b0702f0001000000c02c070001000000
f02c070001000000...
@96 @16 @120 @24
unknown 0x1011d1020 (128 bytes)18201d010100000038501d010100000010672f000100000030932b000100000060402f0001000000a0402f00010000002040300001000000a0e72f0001000000...
@8
lazy protocol witness table accessor for type Swift.CountableRange<Swift.Int> and conformance <A where A: Swift.Comparable, A: Swift._Strideable, A.Stride: Swift.SignedInteger> Swift.CountableRange<A> : Swift.RandomAccessCollection in Swift 0x1002a8030 (32 bytes)554889e5488d3d5dbb1200488d35866213005de9781701000f1f840000000000
@32
associated type metadata accessor for Element in <A> Swift._ArrayBuffer<A> : Swift._ArrayBufferProtocol in Swift 0x1002f70b0 (16 bytes)554889e55de93681fcff660f1f440000
@40
protocol witness for Swift._ArrayBufferProtocol.init () -> A in conformance <A> Swift._ArrayBuffer<A> : Swift._ArrayBufferProtocol in Swift 0x100072cc0 (48 bytes)554889e553504889fbe842f2fcff488d
05031038004889034889d84883c4085b5dc366666666662e0f1f840000000000
Strings:fffff.
@48
protocol witness for Swift._ArrayBufferProtocol.init (Swift._ContiguousArrayBuffer<A.Element>, shiftedToStartIndex : Swift.Int) -> A in conformance <A> Swift._ArrayBuffer<A> : Swift._ArrayBufferProtocol in Swift 0x100072cf0 (32 bytes)554889e553504889fb4889f7e80f0000
004889034889d84883c4085b5dc36690
@56
protocol witness for Swift._ArrayBufferProtocol._copyContents (subRange : Swift.Range<Swift.Int>, initializing : Swift.UnsafeMutablePointer<A.Element>) -> Swift.UnsafeMutablePointer<A.Element> in conformance <A> Swift._ArrayBuffer<A> : Swift._ArrayBufferProtocol in Swift 0x100072d20 (96 bytes)554889e5415741564155415453504989d64989f74989fc488b194d8b68204889dfe82aa92c004c89e74c89fe4c89f24889d94d89e8e89600
00004989c64889df...Strings:
AWAVAUATSPI[A\A]A^A_]
@64
protocol witness for Swift._ArrayBufferProtocol.subscript.getter : (Swift.Int) -> A.Element in conformance <A> Swift._ArrayBuffer<A> : Swift._ArrayBufferProtocol in Swift 0x1000731a0 (80 bytes)554889e5415741564154534989f64989ff488b1a4c8b61204889dfe8b0a42c004c89ff4c89f64889da4c89e1e87ff7fcff4889dfe837a52c
004c89f85b415c41...Strings:
AWAVATSI[A\A^A_]
@72
protocol witness for Swift._ArrayBufferProtocol.subscript.setter : (Swift.Int) -> A.Element in conformance <A> Swift._ArrayBuffer<A> : Swift._ArrayBufferProtocol in Swift 0x100073450 (80 bytes)554889e5415741564154534989f64989ff488b1a4c8b61204889dfe800a22c004c89ff4c89f64889da4c89e1e8bf31fdff4889df5b415c41
5e415f5de97fa22c...Strings:
AWAVATSI[A\A^A_]
ffffff.
@80
protocol witness for Swift._ArrayBufferProtocol.subscript.materializeForSet : (Swift.Int) -> A.Element in conformance <A> Swift._ArrayBuffer<A> : Swift._ArrayBufferProtocol in Swift 0x1000734a0 (96 bytes)554889e5415741564155415453504989d64989f74989fc488b194d8b68204889dfe8aaa12c004c89e74c89fe4c89f24889d94d89e8e8b63bfdff4989c64989d7...
Strings:AWAVAUATSPI
[A\A]A^A_]
@88
protocol witness for Swift._ArrayBufferProtocol.isMutableAndUniquelyReferenced () -> Swift.Bool in conformance <A> Swift._ArrayBuffer<A> : Swift._ArrayBufferProtocol in Swift 0x100073620 (32 bytes)554889e54889f84889f74889c65de9fd020000666666662e0f1f840000000000
Strings:ffff.
@104
protocol witness for Swift._ArrayBufferProtocol.requestNativeBuffer () -> Swift._ContiguousArrayBuffer<A.Element>? in conformance <A> Swift._ArrayBuffer<A> : Swift._ArrayBufferProtocol in Swift 0x100073b20 (64 bytes)554889e5415653488b1f4c8b76204889dfe83a9b2c004889df4c89f6e81f0000004989c64889dfe8c49b2c004c89f05b415e5dc36666662e0f1f840000000000
Strings:AVSH[A^]fff.
@112
value witness table for Builtin.UnknownObject 0x1003c5908 (184 bytes)90c3320001000000a0c3320001000000c0c3320001000000d0c3320001000000e0c3320001000000f0c332000100000010c4320001000000
30c4320001000000...
type metadata for memorydumper2.StructBigP 0x10039d318 (56 bytes)0100000000000000
08d2faffffffffff00000000000000000000000000000000080000000000000010000000000000001800000000000000
_objc_empty_cache 0x7fff8a012de0 (128 bytes)0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000...
protocol witness for memorydumper2.P.f () -> () in conformance memorydumper2.StructSmallP : memorydumper2.P in memorydumper2 0x10000c8c0 (32 bytes)554889e54883ec10488b3f488975f8488955f0e838ffffff
4883c4105dc36690
type metadata for memorydumper2.MemoryRegion.Child 0x1003d03f8 (40 bytes)0100000000000000
089af7ffffffffff28033d000100000000000000000000000800000000000000
protocol witness for memorydumper2.P.g () -> () in conformance memorydumper2.StructBigP : memorydumper2.P in memorydumper2 0x10000cc30 (80 bytes)554889e54883ec30488d45e0488b0f4c8b47084c8b4f10488b7f1848894de04c8945e84c894df048897df84889c7488975d8488955d0e8e5fcffff4883c4305d...
Strings:ffffff.
type metadata for memorydumper2.ClassP 0x10039d3f8 (56 bytes)0100000000000000
78d1faffffffffff00000000000000000000000000000000080000000000000010000000000000001800000000000000
protocol witness table for memorydumper2.StructBigP : memorydumper2.P in memorydumper2 0x10039ca78 (24 bytes)e0cb00000100000030cc00000100000080cc000001000000
@8
protocol witness for memorydumper2.P.f () -> () in conformance memorydumper2.StructBigP : memorydumper2.P in memorydumper2 0x10000cbe0 (80 bytes)554889e54883ec30488d45e0488b0f4c8b47084c8b4f10488b7f1848894de04c8945e84c894df048897df84889c7488975d8488955d0e805fdffff4883c4305d...
Strings:ffffff.
@0
protocol witness for memorydumper2.P.h () -> () in conformance memorydumper2.StructBigP : memorydumper2.P in memorydumper2 0x10000cc80 (80 bytes)554889e54883ec30488d45e0488b0f4c8b47084c8b4f10488b7f1848894de04c8945e84c894df048897df84889c7488975d8488955d0e8c5fcffff4883c4305d...
Strings:ffffff.
@16
malloc 0x10140c330 (32 bytes)636c617373000000404040404040404050505050505050506060606060606060
Strings:class
@@@@@@@@PPPPPPPP````````
value witness table for Swift._ArrayBuffer 0x1003b95e0 (216 bytes)7058300001000000d0e22f0001000000a0f300000100000080e30000010000005058300001000000b0e22f0001000000d0da2f0001000000
702a300001000000...
unknown 0x1011ac568 (128 bytes)18d1eb79ff7f0000
386d3e0001000000e02d018aff7f0000
0000000000000000c4c840010100000080000000100000001000000000000000
0000000000000000...
unknown 0x10140c885 (128 bytes)00000090c51a010100000030993c000100000000000000000000000000000000000000000000000000000040c31a01010000000000000000
0000000000088007...
unknown 0x1011d00f8 (128 bytes)08001d0101000000a0101d010100000090701d0101000000601218000100000030802a0001000000b0702f0001000000c02c070001000000
f02c070001000000...
generic type metadata pattern for Swift.IteratorOverOne 0x1003f0045 (323 bytes)0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000...
unknown 0x1011ac4a0 (128 bytes)18c31a0101000000c8c41a01010000000100000000000000307e0f000100000008593c000100000068c51a010100000098f63c0001000000e02d018aff7f0000...
@24 @120 @32 @56 @40 @72
unknown 0x1011ac318 (128 bytes)90c11a010100000040c31a01010000000100000000000000307e0f000100000008593c0001000000e0c31a010100000098f63c0001000000e02d018aff7f0000...
@0
ObjC class Swift._ContiguousArrayStorage<Swift.UInt8> 0x1011ac4c8 (128 bytes)68c51a010100000098f63c0001000000e02d018aff7f0000
000000000000000085c840010100000003000000000000001000000007000000
a800000010000000...
@8
ObjC class Swift._ContiguousArrayStorage1 0x1003cf698 (144 bytes)386d3e000100000008fc3c0001000000e02d018aff7f0000
0000000000000000b58d40010100000003000000000000001000000007000000
a000000010000000...
@48
unknown 0x10140c3b0 (128 bytes)fe8debdc06c7c5ee
0100000001000000a0c41a010100000020bd3b00010000000000000000000000e06f3001010000008f2376928ecfc543
0100000001740000...Strings:ZTUMZTUM
@64 @16
unknown 0x100000001 (128 bytes)faedfe0700000103
000080020000001900000058120000850021000000000019000000480000005f5f504147455a45524f00000000000000
0000000000000000...Strings:
__PAGEZERO__TEXT
@8
type metadata for Swift.UInt8 0x1003bbd20 (32 bytes)0100000000000000
f833f9ffffffffff00000000000000000000000000000000
@24
malloc 0x101306fe0 (48 bytes)00000000000000000000000000000000f934ed8b8ecfc5e1
0100000001000000f8001d010100000080f01c0101000000
@40
unknown 0x1011cf028 (128 bytes)0100000000000000
28ef17ffffffffff0000000000000000000000000000000020bd3b00010000000000000000000000f8033d0001000000
08f01c0101000000...
@72
@32@24
unknown 0x1011cf080 (128 bytes)0100000000000000
d0ee17ffffffffff00000000000000000000000000000000f8033d000100000000000000000000000000000000000000
0000000000000000...
@40 @48 @120 @80 @32
unknown 0x1011cf008 (128 bytes)000000000000000028f01c01010000000100000000000000e0953b00010000000100000000000000
28ef17ffffffffff0000000000000000
0000000000000000...
@56@64
protocol witness for memorydumper2.P.h () -> () in conformance memorydumper2.StructSmallP : memorydumper2.P in memorydumper2 0x10000c900 (32 bytes)554889e54883ec10488b3f488975f8488955f0e818ffffff
4883c4105dc36690
type metadata for memorydumper2.StructSmallP 0x10039d250 (32 bytes)0100000000000000
78d2faffffffffff00000000000000000000000000000000
protocol witness for memorydumper2.P.g () -> () in conformance memorydumper2.StructSmallP : memorydumper2.P in memorydumper2 0x10000c8e0 (32 bytes)554889e54883ec10488b3f488975f8488955f0e828ffffff
4883c4105dc36690
malloc 0x10140c310 (32 bytes)6c61726765000000101010101010101020202020202020203030303030303030
Strings:large
00000000
protocol witness table for memorydumper2.StructSmallP : memorydumper2.P in memorydumper2 0x10039ca60 (24 bytes)c0c8000001000000e0c800000100000000c9000001000000
@0 @16 @8
malloc 0x10140c290 (120 bytes)736d616c6c0000000000000000000000470000000000000050d239000100000060ca39000100000010c340010100000045003f0001000000
ffffffffffffffff...Strings:small
@112 @64 @104 @72 @80 @48@88 @24 @40 @32
Protocols
![Page 82: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/82.jpg)
Protocols
data 1
data 2
data 3
type metadata
witness table
![Page 83: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/83.jpg)
Protocols
data 1
data 2
data 3
type metadata
witness table
method f
method g
method h
![Page 84: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/84.jpg)
Protocol Method Call
method f
method g
method h
let p: Protocol = …p.g()
table = p[4]methodf = table[offset]methodf(p)
![Page 85: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/85.jpg)
Protocols
box pointer
type metadata
witness table
method f
method g
method h
data 1
data 2
data 3
data 4
data 5
![Page 86: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/86.jpg)
Enumsenum SimpleEnum { case A, B, C, D, E}struct SimpleEnumHolder { var a: SimpleEnum var b: SimpleEnum var c: SimpleEnum var d: SimpleEnum var e: SimpleEnum}SimpleEnumHolder(a: .A, b: .B, c: .C, d: .D, e: .E)
![Page 87: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/87.jpg)
Enumsenum SimpleEnum { case A, B, C, D, E}struct SimpleEnumHolder { var a: SimpleEnum var b: SimpleEnum var c: SimpleEnum var d: SimpleEnum var e: SimpleEnum}SimpleEnumHolder(a: .A, b: .B, c: .C, d: .D, e: .E)
unknown 0x7fff5fbff250 (5 bytes)0001020304
![Page 88: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/88.jpg)
Enumsenum IntRawValueEnum: Int { case A = 1, B, C, D, E}struct IntRawValueEnumHolder { var a: IntRawValueEnum var b: IntRawValueEnum var c: IntRawValueEnum var d: IntRawValueEnum var e: IntRawValueEnum}IntRawValueEnumHolder(a: .A, b: .B, c: .C, d: .D, e: .E)
![Page 89: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/89.jpg)
Enumsenum IntRawValueEnum: Int { case A = 1, B, C, D, E}struct IntRawValueEnumHolder { var a: IntRawValueEnum var b: IntRawValueEnum var c: IntRawValueEnum var d: IntRawValueEnum var e: IntRawValueEnum}IntRawValueEnumHolder(a: .A, b: .B, c: .C, d: .D, e: .E)
unknown 0x7fff5fbff210 (5 bytes)0001020304
![Page 90: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/90.jpg)
Enumsenum StringRawValueEnum: String { case A = "whatever", B, C, D, E}struct StringRawValueEnumHolder { var a: StringRawValueEnum var b: StringRawValueEnum var c: StringRawValueEnum var d: StringRawValueEnum var e: StringRawValueEnum}StringRawValueEnumHolder(a: .A, b: .B, c: .C, d: .D, e: .E)
![Page 91: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/91.jpg)
Enumsenum StringRawValueEnum: String { case A = "whatever", B, C, D, E}struct StringRawValueEnumHolder { var a: StringRawValueEnum var b: StringRawValueEnum var c: StringRawValueEnum var d: StringRawValueEnum var e: StringRawValueEnum}StringRawValueEnumHolder(a: .A, b: .B, c: .C, d: .D, e: .E)
unknown 0x7fff5fbff1f0 (5 bytes)0001020304
![Page 92: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/92.jpg)
Enumsenum OneAssociatedObjectEnum { case A(AnyObject) case B, C, D, E}struct OneAssociatedObjectEnumHolder { var a: OneAssociatedObjectEnum var b: OneAssociatedObjectEnum var c: OneAssociatedObjectEnum var d: OneAssociatedObjectEnum var e: OneAssociatedObjectEnum}OneAssociatedObjectEnumHolder( a: .A(NSObject()), b: .B, c: .C, d: .D, e: .E)
![Page 93: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/93.jpg)
Enums
malloc 0x1015069d0 (80 bytes)0000000000000000000000000000000000000000000000000000000000000000ead95996ff7f0000f09bff89ff7f0000
00000000000000000000000000000000...
@72
CreateStringFromFileSystemRepresentationByAddingPercentEscapes.hexchars 0x7fff9659d9ea (128 bytes)696e697400616c6c6f63576974685a6f6e653a00657863657074696f6e576974684e616d653a726561736f6e3a75736572496e666f3a005f
616c6c6f63005f69...Strings:
initallocWithZone:
exceptionWithName:reason:userInfo:_alloc_initcopy
copyWithZone:retainCount
retainautorelease
countobje
@32
-[NSObject init] 0x7fff89ff9bf0 (16 bytes)554889e54889f85dc390909090909090
@40
ObjC class NSObject 0x7fff79ebd0f0 (40 bytes)18d1eb79ff7f0000
0000000000000000d06950010100000003000000010000005603200101000000
@16
OBJC_METACLASS_$_NSObject 0x7fff79ebd118 (40 bytes)18d1eb79ff7f0000f0d0eb79ff7f0000
900e40010100000007000000020000009403200101000000
@0
unknown 0x100000003 (128 bytes)fe0700000103000080020000001900000058120000850021000000000019000000480000005f5f504147455a45524f000000000000000000
0000000000000000...Strings:
__PAGEZERO__TEXT
@24
unknown 0x101200356 (128 bytes)000018cbeb79ff7f0000f147200101000000213b200101000000f8c6eb79ff7f00009847397bff7f
00000000000000000000000000000000
0000000009a00700...
@32@8
@0
malloc 0x101400e90 (144 bytes)00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033db5996ff7f0000dba0ff89ff7f0000...
@16
unknown 0x101200394 (128 bytes)0700000010c7eb79ff7f0000a1382001
010000000000000000000000f8c6eb79ff7f0000c047397bff7f000000000000
000000000000000000000000f0032001...
@32
Instance of NSObject 0x101400440 (16 bytes)f0d0eb79ff7f0000
0000000000000000
@0
malloc 0x1014013c0 (40 bytes)40044001010000000000000000000000020000000000000004000000000000000600000000000000
@0
![Page 94: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/94.jpg)
Enumsenum ManyAssociatedObjectsEnum { case A(AnyObject) case B(AnyObject) case C(AnyObject) case D(AnyObject) case E(AnyObject)}struct ManyAssociatedObjectsEnumHolder { var a: ManyAssociatedObjectsEnum var b: ManyAssociatedObjectsEnum var c: ManyAssociatedObjectsEnum var d: ManyAssociatedObjectsEnum var e: ManyAssociatedObjectsEnum}ManyAssociatedObjectsEnumHolder( a: .A(NSObject()), b: .B(NSObject()), c: .C(NSObject()), d: .D(NSObject()), e: .E(NSObject()))
![Page 95: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/95.jpg)
Enums
Instance of NSObject 0x101305160 (16 bytes)f0d0eb79ff7f0000
0000000000000000
ObjC class NSObject 0x7fff79ebd0f0 (40 bytes)18d1eb79ff7f0000
000000000000000030a720010100000003000000020000005603200101000000
@0
OBJC_METACLASS_$_NSObject 0x7fff79ebd118 (40 bytes)18d1eb79ff7f0000f0d0eb79ff7f0000
305330010100000007000000020000009403200101000000
@0
unknown 0x101200356 (128 bytes)000018cbeb79ff7f
0000d148200101000000013c200101000000f8c6eb79ff7f00009847397bff7f
00000000000000000000000000000000
0000000009a00700...
@32
malloc 0x10120a730 (80 bytes)00000000000000000000000000000000d1d95996ff7f0000af7cff89ff7f0000ead95996ff7f0000f09bff89ff7f0000
00000000000000000000000000000000...
@16
malloc 0x101305330 (144 bytes)00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033db5996ff7f0000dba0ff89ff7f0000...
CreateStringFromFileSystemRepresentationByAddingPercentEscapes.hexchars 0x7fff9659d9d1 (128 bytes)6465616c6c6f630066696e616c697a650072656c6561736500696e697400616c6c6f63576974685a6f6e653a00657863657074696f6e5769
74684e616d653a72...Strings:deallocfinalizerelease
initallocWithZone:
exceptionWithName:reason:userInfo:_alloc_initcopy
copyWithZone:retainCount
reta
-[NSObject dealloc] 0x7fff89ff7caf (10 bytes)554889e55de92b90
0000
Instance of NSObject 0x1013046d0 (16 bytes)f0d0eb79ff7f0000
0000000000000000
@0
Instance of NSObject 0x1013058e0 (16 bytes)f0d0eb79ff7f0000
0000000000000000
@0
Instance of NSObject 0x101302790 (16 bytes)f0d0eb79ff7f0000
0000000000000000
@0
@8
@16
@0
unknown 0x101200394 (128 bytes)0700000010c7eb79ff7f000081392001
010000000000000000000000f8c6eb79ff7f0000c047397bff7f000000000000
000000000000000000000000f0032001...
@32
Instance of NSObject 0x101303470 (16 bytes)f0d0eb79ff7f0000
0000000000000000
@0
malloc 0x1013053c0 (73 bytes)e058300101000000000000000000000060513001010000000100000000000000902730010100000002303030303002007034300101000000
0300000000000000...Strings:00000
@16 @64 @0 @32 @48
@16 @24
@72
CreateStringFromFileSystemRepresentationByAddingPercentEscapes.hexchars 0x7fff9659d9ea (128 bytes)696e697400616c6c6f63576974685a6f6e653a00657863657074696f6e576974684e616d653a726561736f6e3a75736572496e666f3a005f
616c6c6f63005f69...Strings:
initallocWithZone:
exceptionWithName:reason:userInfo:_alloc_initcopy
copyWithZone:retainCount
retainautorelease
countobje
@32
-[NSObject init] 0x7fff89ff9bf0 (16 bytes)554889e54889f85dc390909090909090
@40
![Page 96: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/96.jpg)
Wrapping Up
![Page 97: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/97.jpg)
Wrapping Up
![Page 98: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/98.jpg)
01AA2C5EFF001101
0000000000000000
00000000000000FF
A0F31C228A177013...
00000001000000000000000100000008
…
00000001000000100000000100000018
.
.
.…
Wrapping Up
![Page 99: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/99.jpg)
Wrapping Up4200000000000000 900400cce67f0000 800300cce67f0000 400100cce67f0000
0x0000000000000042
0x00007fe6cc000490
0x00007fe6cc000380
0x00007fe6cc000140
………… ………… …………💥
![Page 100: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/100.jpg)
Wrapping Up struct WithPadding { char a; char b; char c; short d; char e; int f; char g; long h; }; WithPadding withPadding = { 1, 2, 3, 4, 5, 6, 7, 8 };
unknown 0x7fff5fbff288 (24 bytes)010203000400050006000000070000000800000000000000
![Page 101: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/101.jpg)
Wrapping Up
class (isa)
retain counts
stored properties
stored properties
Object
class (isa)
Class
![Page 102: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/102.jpg)
Wrapping Up
box pointer
type metadata
witness table
method f
method g
method h
data 1
data 2
data 3
data 4
data 5
![Page 103: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/103.jpg)
Wrapping Upenum SimpleEnum { case A, B, C, D, E}struct SimpleEnumHolder { var a: SimpleEnum var b: SimpleEnum var c: SimpleEnum var d: SimpleEnum var e: SimpleEnum}SimpleEnumHolder(a: .A, b: .B, c: .C, d: .D, e: .E)
unknown 0x7fff5fbff250 (5 bytes)0001020304
![Page 104: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/104.jpg)
Wrapping Up
Instance of NSObject 0x101305160 (16 bytes)f0d0eb79ff7f0000
0000000000000000
ObjC class NSObject 0x7fff79ebd0f0 (40 bytes)18d1eb79ff7f0000
000000000000000030a720010100000003000000020000005603200101000000
@0
OBJC_METACLASS_$_NSObject 0x7fff79ebd118 (40 bytes)18d1eb79ff7f0000f0d0eb79ff7f0000
305330010100000007000000020000009403200101000000
@0
unknown 0x101200356 (128 bytes)000018cbeb79ff7f
0000d148200101000000013c200101000000f8c6eb79ff7f00009847397bff7f
00000000000000000000000000000000
0000000009a00700...
@32
malloc 0x10120a730 (80 bytes)00000000000000000000000000000000d1d95996ff7f0000af7cff89ff7f0000ead95996ff7f0000f09bff89ff7f0000
00000000000000000000000000000000...
@16
malloc 0x101305330 (144 bytes)00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033db5996ff7f0000dba0ff89ff7f0000...
CreateStringFromFileSystemRepresentationByAddingPercentEscapes.hexchars 0x7fff9659d9d1 (128 bytes)6465616c6c6f630066696e616c697a650072656c6561736500696e697400616c6c6f63576974685a6f6e653a00657863657074696f6e5769
74684e616d653a72...Strings:deallocfinalizerelease
initallocWithZone:
exceptionWithName:reason:userInfo:_alloc_initcopy
copyWithZone:retainCount
reta
-[NSObject dealloc] 0x7fff89ff7caf (10 bytes)554889e55de92b90
0000
Instance of NSObject 0x1013046d0 (16 bytes)f0d0eb79ff7f0000
0000000000000000
@0
Instance of NSObject 0x1013058e0 (16 bytes)f0d0eb79ff7f0000
0000000000000000
@0
Instance of NSObject 0x101302790 (16 bytes)f0d0eb79ff7f0000
0000000000000000
@0
@8
@16
@0
unknown 0x101200394 (128 bytes)0700000010c7eb79ff7f000081392001
010000000000000000000000f8c6eb79ff7f0000c047397bff7f000000000000
000000000000000000000000f0032001...
@32
Instance of NSObject 0x101303470 (16 bytes)f0d0eb79ff7f0000
0000000000000000
@0
malloc 0x1013053c0 (73 bytes)e058300101000000000000000000000060513001010000000100000000000000902730010100000002303030303002007034300101000000
0300000000000000...Strings:00000
@16 @64 @0 @32 @48
@16 @24
@72
CreateStringFromFileSystemRepresentationByAddingPercentEscapes.hexchars 0x7fff9659d9ea (128 bytes)696e697400616c6c6f63576974685a6f6e653a00657863657074696f6e576974684e616d653a726561736f6e3a75736572496e666f3a005f
616c6c6f63005f69...Strings:
initallocWithZone:
exceptionWithName:reason:userInfo:_alloc_initcopy
copyWithZone:retainCount
retainautorelease
countobje
@32
-[NSObject init] 0x7fff89ff9bf0 (16 bytes)554889e54889f85dc390909090909090
@40
![Page 105: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/105.jpg)
Wrapping Up• Data laid out linearly • Padded for alignment • Class instances have isa and refcounts first • Protocol values have 3 words of inline data • Larger data is boxed • Dynamic method dispatch uses vtables • Swift is powerful: all C-ish evil stuff available • Can learn a lot by poking around
![Page 106: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/106.jpg)
Wrapping Up
👍
![Page 107: Swift Memory Layout - GOTO Conference · Memory Vacuum tubes Mercury (or gin) delay line Magnetic core DRAM](https://reader034.vdocuments.us/reader034/viewer/2022042100/5e7c001e7e3c6d74d0362164/html5/thumbnails/107.jpg)