程序内存使用情况:
object-C可执行的程序是由(可执行)代码、初始化代码和未初始化的程序数据、链接信息、重定位信息、举报数据和动态数据构成。
1、程序数据包括以静态方式声明的变量和程序常量(即在程序编译时在代码中设置的常数)。
2、可执行代码、程序数据已经链接与重定位信息会议静态方式被分配内存,并在程序的声明周期中一直存在。
3、局部(自动)数据在语句中声明并且仅在该语句块中有效,当该语句块执行后局部数据不会继续存在
{
int a=1;
NSLog(@"%d",a);
}
a为局部变量,只存在于这个语句块中,执行完语句将不会存在。
自动数据被存储在程序的栈中,程序栈通常是执行程序、线程前舍得尺寸的内存段。栈用于存储局部变量和调用方式、函数上下文数据包括方法的输入参数、返回值,已经调用完方法后继续执行程序的代码地址。操作系统会自动管理哲学内存,这些数据会获得栈中的内存,而且分配给这些书的内存会在他们失效和被释放。
在运行时中通过NSobject类的alloc方法创建的对象存储在动态分配的内存及堆内存中。以动态方式创建对象就意味着需要进行内存管理,因为在堆内存中创建的对象永远不会超出其作用范围。(这就是为什么谁创建谁release)。
程序的栈尺寸(通常)是在程序启动时确定的,会自动由系统管理。另一方面,OC中对象在程序执行时动态创建的,不会自动由系统收回,因此需要程序必须进行内存管理,以确保通过恰当的方式使用系统内存,不进行内存管理或错误内存管理会导致以下结果:
内存泄露:
如果程序没有释放不在使用的的对象就会出现该问题。如果程序诶呦使用为其分配的内存,就会浪费内存资源;如果系统机械为程序分配内存并没有是非这些内存,程序最终会耗尽系统内存。
悬挂指针:
如果程序释放了仍在使用的对象(野指针),就会到账该问题。如果将来的程序尝试访问这些对象就会出现程序错误。
网友评论