Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/codermjlee/mems
Utils for viewing memory in Swift.
https://github.com/codermjlee/mems
ios macos memory swift
Last synced: 4 days ago
JSON representation
Utils for viewing memory in Swift.
- Host: GitHub
- URL: https://github.com/codermjlee/mems
- Owner: CoderMJLee
- License: mit
- Created: 2019-06-24T05:17:05.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2019-11-04T02:57:33.000Z (over 5 years ago)
- Last Synced: 2025-02-07T05:08:51.460Z (14 days ago)
- Topics: ios, macos, memory, swift
- Language: Swift
- Size: 29.3 KB
- Stars: 327
- Watchers: 6
- Forks: 66
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Mems
> Utils for viewing memory in Swift.
>
> 用来窥探Swift内存的小工具## 用法
```swift
func show(val: inout T) {
print("-------------- \(type(of: val)) --------------")
print("变量的地址:", Mems.ptr(ofVal: &val))
print("变量的内存:", Mems.memStr(ofVal: &val))
print("变量的大小:", Mems.size(ofVal: &val))
print("")
}func show(ref: T) {
print("-------------- \(type(of: ref)) --------------")
print("对象的地址:", Mems.ptr(ofRef: ref))
print("对象的内存:", Mems.memStr(ofRef: ref))
print("对象的大小:", Mems.size(ofRef: ref))
print("")
}
```### 整型
```swift
var int8: Int8 = 10
show(val: &int8)
// -------------- Int8 --------------
// 变量的地址: 0x00007ffeefbff598
// 变量的内存: 0x0a
// 变量的大小: 1var int16: Int16 = 10
show(val: &int16)
// -------------- Int16 --------------
// 变量的地址: 0x00007ffeefbff590
// 变量的内存: 0x000a
// 变量的大小: 2var int32: Int32 = 10
show(val: &int32)
// -------------- Int32 --------------
// 变量的地址: 0x00007ffeefbff588
// 变量的内存: 0x0000000a
// 变量的大小: 4var int64: Int64 = 10
show(val: &int64)
// -------------- Int64 --------------
// 变量的地址: 0x00007ffeefbff580
// 变量的内存: 0x000000000000000a
// 变量的大小: 8
```### 枚举
```swift
enum TestEnum {
case test1(Int, Int, Int)
case test2(Int, Int)
case test3(Int)
case test4(Bool)
case test5
}var e = TestEnum.test1(1, 2, 3)
show(val: &e)
// -------------- TestEnum --------------
// 变量的地址: 0x00007ffeefbff580
// 变量的内存: 0x0000000000000001 0x0000000000000002 0x0000000000000003 0x0000000000000000
// 变量的大小: 32e = .test2(4, 5)
show(val: &e)
// -------------- TestEnum --------------
// 变量的地址: 0x00007ffeefbff580
// 变量的内存: 0x0000000000000004 0x0000000000000005 0x0000000000000000 0x0000000000000001
// 变量的大小: 32e = .test3(6)
show(val: &e)
// -------------- TestEnum --------------
// 变量的地址: 0x00007ffeefbff580
// 变量的内存: 0x0000000000000006 0x0000000000000000 0x0000000000000000 0x0000000000000002
// 变量的大小: 32e = .test4(true)
show(val: &e)
// -------------- TestEnum --------------
// 变量的地址: 0x00007ffeefbff580
// 变量的内存: 0x0000000000000001 0x0000000000000000 0x0000000000000000 0x0000000000000003
// 变量的大小: 32e = .test5
show(val: &e)
// -------------- TestEnum --------------
// 变量的地址: 0x00007ffeefbff580
// 变量的内存: 0x0000000000000000 0x0000000000000000 0x0000000000000000 0x0000000000000004
// 变量的大小: 32
```### 结构体
```swift
struct Date {
var year = 10
var test = true
var month = 20
var day = 30
}var s = Date()
show(val: &s)
// -------------- Date --------------
// 变量的地址: 0x00007ffeefbff580
// 变量的内存: 0x000000000000000a 0x0000000000000001 0x0000000000000014 0x000000000000001e
// 变量的大小: 32
```### 类
```swift
class Point {
var x = 11
var test = true
var y = 22
}var p = Point()
show(val: &p)
// -------------- Point --------------
// 变量的地址: 0x00007ffeefbff590
// 变量的内存: 0x0000000101023680
// 变量的大小: 8show(ref: p)
// -------------- Point --------------
// 对象的地址: 0x0000000101023680
// 对象的内存: 0x00000001000072d8 0x0000000200000002 0x000000000000000b 0x0000000000000001 0x0000000000000016 0x3030303030303030
// 对象的大小: 48
```### 数组
```swift
var arr = [1, 2, 3, 4]
show(val: &arr)
// -------------- Array --------------
// 变量的地址: 0x00007ffeefbff598
// 变量的内存: 0x0000000101023800
// 变量的大小: 8show(ref: arr)
// -------------- Array --------------
// 对象的地址: 0x0000000101023800
// 对象的内存: 0x00007fff9c30f848 0x0000000200000002 0x0000000000000004 0x0000000000000008 0x0000000000000001 0x0000000000000002 0x0000000000000003 0x0000000000000004
// 对象的大小: 64
```### 字符串
```swift
var str1 = "123456789"
// taggerPtr(tagger pointer)
print(str1.mems.type())
show(val: &str1)
// -------------- String --------------
// 变量的地址: 0x00007ffeefbff580
// 变量的内存: 0x3837363534333231 0xe900000000000039
// 变量的大小: 16var str2 = "1234567812345678"
// text(字符串存储在TEXT段)
print(str2.mems.type())
show(val: &str2)
// -------------- String --------------
// 变量的地址: 0x00007ffeefbff570
// 变量的内存: 0xd000000000000010 0x8000000100007610
// 变量的大小: 16var str3 = "1234567812345678"
str3.append("9")
// heap(字符串存储在堆空间)
print(str3.mems.type())
show(val: &str3)
// -------------- String --------------
// 变量的地址: 0x00007ffeefbff560
// 变量的内存: 0xf000000000000011 0x00000001007b6ad0
// 变量的大小: 16show(ref: str3)
// -------------- String --------------
// 对象的地址: 0x00000001007b6ad0
// 对象的内存: 0x00007fff963e9660 0x0000000200000002 0x0000000000000018 0xf000000000000011 0x3837363534333231 0x3837363534333231 0x0000000000200039 0x0000000000000000
// 对象的大小: 64
```### 设置字节显示格式
```swift
var int64: Int64 = 10print("1个字节为1组 :", Mems.memStr(ofVal: &int64, alignment: .one))
// 1个字节为1组 : 0x0a 0x00 0x00 0x00 0x00 0x00 0x00 0x00print("2个字节为1组 :", Mems.memStr(ofVal: &int64, alignment: .two))
// 2个字节为1组 : 0x000a 0x0000 0x0000 0x0000print("4个字节为1组 :", Mems.memStr(ofVal: &int64, alignment: .four))
// 4个字节为1组 : 0x0000000a 0x00000000print("8个字节为1组 :", Mems.memStr(ofVal: &int64, alignment: .eight))
// 8个字节为1组 : 0x000000000000000a
```