美文网首页
15-String与Array

15-String与Array

作者: SwordDevil | 来源:发表于2021-08-09 07:39 被阅读0次

关于String的思考

  • 1个String变量占用多少内存?
  • 下面2个String变量,底层存储有什么不同?
// 字符串长度 <= 0xF,字符串内容直接存放在str1变量的内容中
var str1 = "0123456789"

// 字符串长度 > 0xF,字符串内容存放在__TEXT.cstring中(常量区)
// 字符串的地址值信息存放在str2变量的后8个字节中
var str2 = "0123456789ABCDEF"

/*
 占用16个字节,0的ASCII对应30 1的ASCII对应31 所以是直接将数值存储进去
 0x3736353433323130 0xea00000000003938
 0xe 用来做标识的
 a是用来存储长度的
 类似于OC的tagger pointer
 */
var str1 = "0123456789"
//var str1 = "0123456789ABCDE" // 0x3736353433323130 0xef45444342413938

/*
 如果超过16个字节
 0xd000000000000010 0x8000000100007ad0
 0xd00000000000001a 0x8000000100007ad0
 但是还是占用16个字节
 但是这2个地址变化不大 所以字符不是存储在这里
 
 汇编代码
 movabsq $0x7fffffffffffffe0, %rdx
 addq %rdx, %rdi
 
 字符串的真实地址 + 0x7fffffffffffffe0 = 0x8000000100007ad0
 字符串的真实地址 = 0x8000000100007ad0 - 0x7fffffffffffffe0 = 0x100007AF0
 
 0x100007AF0是"0123456789ABCDEF"的真实地址
 %rdi存放着字符串的真实地址
 %rsi存放的是字符串的长度0x10
 callq String.init
 %rdx存放的是 字符串的真实地址 + 0x7fffffffffffffe0
 */
var str2 = "0123456789ABCDEF" // 0xd000000000000010 0x8000000100007ad0
//var str2 = "0123456789ABCDEFFDSFSDFDSF" // 0xd00000000000001a 0x8000000100007ad0

  • 如果对String进行拼接操作,String变量的存储会发生什么变化?
// 如果字符串长度没超出0xF, 还是会保存str1变量的内存里面的
str1.append("ABCDE")
// 开辟堆空间
str1.append("F")

// 超出16个字节以后, 开辟堆空间
str2.append("G")

从编码到启动App

dyld_stud_binder

  • 符号的延迟绑定通过dyld_stud_binder完成
  • jmpq *0xb31(%rip)格式的汇编指令
    占用6个字节

关于Array的思考

相关文章

  • 15-String与Array

    关于String的思考 1个String变量占用多少内存? 下面2个String变量,底层存储有什么不同? 如果对...

  • 数组基本操作

    Array 定义空Array Array赋值 元素判断与获取 遍历Array for in 与 forEach的区...

  • PHP数组复习

    1.array+array与array_marge的区别 array+array当两个数组的下标相同的时候返...

  • (七) [Swift]Swift中的有序集合

    1.Array的初始化 2.Array的长度与判空 3.Array的索引 4.Array添加与删除元素 5.Arr...

  • 2019-07-21日学习总结

    array与循环 array 数组是矩阵的集合array(data = NA, dim = length(dat...

  • 2020-06-04

    1.python的list与array的不同: 要使用array的话,需要:from array import a...

  • Array.of/Array

    Array.of是ES6新增的构造新数组的方法,与Array比较类似,弥补了Array的一些缺点 语法 Array...

  • JS基础数组与伪数组

    1.基本用法 window.Array是全局函数(也是函数) Array()与new Array()是一样的效果在...

  • js数组方法与属性详解

    Array的属性与方法

  • javascript的数组Array

    创建数组及修改 类型检测 转换方法 Array栈操作 Array队列操作 Array的反转和排序 数组的连接与截取...

网友评论

      本文标题:15-String与Array

      本文链接:https://www.haomeiwen.com/subject/qflevltx.html