iOS面试---内存管理

内存布局

  • 栈: 方法调用、局部变量 连续地址,从高地址到低地址
  • 堆:分配的内存对象、是离散的,从低地址到高地址,需要我们手动进行内存管理
  • 为初始化数据区(bss):为初始化的全局变量等
  • 已初始化数据(data区):已初始化的全局变量等
  • 代码段(text):程序代码

2. 各个数据类型占据字节空间

  • char: 1字节 也就是28 即 256个ASCII字符
  • char*:指针变量,(32位机器的寻址为232即32bit,就是4字节。对于64位编译器来说就是8字节)
  • short int:2字节
  • int:4字节
  • unsigned int:4字节
  • long:在64位编译器下为8字节,在32位下为4字节
  • long long:8字节
  • unsigned long long: 8字节
  • float:4字节
  • double:8字节

static、const、sizeOf关键字

static关键字

static关键字的主要作用有两个,一个是用于修饰存储类型使其成为静态存储类型,二是用于修饰链接属性使之成为内部链接属性

  • 静态存储类型: 在函数内定义的静态局部变量,存储在内存的静态存储区,所以即使该函数运行结束,该值也不会被销毁,等待下次运行进行使用。 在函数外定义的静态变量——静态全局变量,该变量的作用域只能在该变量的文件中,不能被其他文件通过extern引用
  • 内部链接属性:静态函数只能在声明它的源文件中使用

const关键字

  1. 声明常量,使得指定变量不能修改
  2. 修饰函数形参,使得形参在函数内不能修改,表示输入参数
  3. 修饰函数返回值,使得函数返回值不能修改

sizeof关键字

在编译阶段处理,结果为对象或类型所占的内存字节数