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关键字
- 声明常量,使得指定变量不能修改
- 修饰函数形参,使得形参在函数内不能修改,表示输入参数
- 修饰函数返回值,使得函数返回值不能修改
sizeof关键字
在编译阶段处理,结果为对象或类型所占的内存字节数