Home learning plan
Post
Cancel

learning plan

Tech Direction

  1. Cocos3d
  2. Unity
  3. ARKit
  4. RealityKit
  5. SceneKit
  6. SpriteKit
  7. Java后端开发
  8. 音视频开发(FFMpeg)
  9. weex, uniapp, JavaScriptCore
  10. Javascript
  11. C++
  12. Flutter
  13. SwiftUI

Tech-Points

断点续传深入全面理解

设计模式

继续深入整合OC底层原理

加强对app架构的理解和表述能力

加强数据结构和算法的练习

继续学习Java

继续学习Web

继续深入学习音视频编解码

继续深入学习OpenGL

关于tableView优化的思考

关于程序内存布局的思考

  • 未运行或启动时,程序或软件以可执行文件的形式存储在硬盘上
  • windows平台的可执行文件格式为 PE
  • MacOS, iOS平台的可执行文件为Mach-O
  • Linux平台的可执行文件为ELF
  • 程序启动后被加载到内存
  • 程序的内存区域主要分为:代码段,数据段,堆段,栈段
  • 所有函数无论定义在哪里,在内存中都存储在代码段
  • 代码段是不可修改的

    关于runtime的理解(程序全局去思考)

关于引用类型和值类型的思考

  • 值类型赋值会发生深拷贝
  • swift标准库种的值类型有copy-on-write技术来提升性能
  • 值类型主要变现在行为
  • 值类型底层可以存储在堆上
  • 值类型的内存可以在全局区,栈区,堆区
  • 引用类型一定存储在堆上,考引用计数进行内存管理

关于Swift中String的存储

  • a. String在行为上被实现为值类型
  • b. 当字符数小于16时,字符串占16字节的内存,其中第9个字节用来存储标识及长度,其余15字节用来存储值或内容
  • c. 当字符长度大于15字节时,字符串地址的后8字节存储真正的地址值,前八个字节的最后一个字节存储长度,第一个字节存储标识
  • d. c中第一个字节是0xd0标识存储在常量区,0xf0标识存储在堆区
  • e. b中标识符为0xe标识存储方式类似TaggedPointer

关于Swift中Array的存储

  • Array在行为上被实现为值类型
  • Array的低层存储,利用汇编进行探索,可以发现存储在堆上

关于内存对齐的思考

  • 在MacOS, iOS平台,操作系统在用malloc分配堆内存时按16字节对齐,也就是说分配的堆内存大小是16的倍数
  • 分配内存的内存同时存储多种类型的数据时,也存在内存对齐,比如char, int同时存储室,会以较大的int类型对齐
This post is licensed under CC BY 4.0 by the author.