String字符串
空间占用=大小
- 空间占用:
0x10字节 =16字节 = 2个int64
分类=类型
概述
Swift中String
Small StringLarge String三类
Native- 查看字符串
x/s "objectAddr + 0x20" - 真正地址
realStrAddr- =
objectAddr+0x20 - =
objectAddr+32 - =
objectAddr+nativeBias
- =
- 查看字符串
Shared查看字符串
x/s "objectAddr + 0x11" po (NSString*)objectAddr- 真正地址
realStrAddr=objectAddr+0x11
- 说明
- 对于Bridge的字符串:objectAddr == NSString的地址
- 内存布局保存的数据,是NSString中的数据
- 对于Bridge的字符串:objectAddr == NSString的地址
Foreign- 真正地址
realStrAddr=objectAddr
- 真正地址
详解
- Swift中String
Small StringLarge String- 分3类
- native
- Native strings have tail-allocated storage, which begins at an offset of
nativeBiasfrom the storage object's address. String literals, which reside in the constant section, are encoded as their start address minusnativeBias, unifying code paths for both literals ("immortal native") and native strings. Native Strings are always managed by the Swift runtime.
- Native strings have tail-allocated storage, which begins at an offset of
- shared
- Shared strings do not have tail-allocated storage, but can provide access upon query to contiguous UTF-8 code units. Lazily-bridged NSStrings capable of providing access to contiguous ASCII/UTF-8 set the ObjC bit. Accessing shared string's pointer should always be behind a resilience barrier, permitting future evolution.
- foreign
- Foreign strings cannot provide access to contiguous UTF-8. Currently, this only encompasses lazily-bridged NSStrings that cannot be treated as "shared". Such strings may provide access to contiguous UTF-16, or may be discontiguous in storage. Accessing foreign strings should remain behind a resilience barrier for future evolution. Other foreign forms are reserved for the future.
- native
- 其他说明
- 对于Shared和foreign
- always created and accessed behind a resilience barrier, providing flexibility for the future.
- 对于Shared和foreign
- 分3类