iOS学习之C语言内存管理
一、存储区划分
按照地址从高到低的顺序:栈区,堆区,静态区,常量区,代码区
1.栈区:局部变量的存储区域
局部变量基本都在函数、循环、分支中定义
栈区的内存空间由系统自动分配和回收
栈顶,栈底:先定义的局部变量的存储区域从栈底开始分配,后定义的局部变量向栈顶分配
特点:先进后出,后进先出
当函数、循环、分支结束后,局部变量的生命周期结束,不再被使用,由系统自动回收内存空间
栈区的内存安全问题:在函数中返回栈区的地址是不安全的
void test() {
;
}
void test1() {
int a; // 栈区不会清空数据,只会回收内存空间,故输出为上个变量的值
printf("a = %d\n", a);;
}
int main() {
test();
test1();
;
}
2.静态区:静态变量和全局变量的存储区域
静态区的内存空间由系统自动分配和回收
静态区的变量生命周期和整个程序一样长
int sumValue(int number) {
;
n++;
number += n;
return number;
}
int main() {
; // 用static修饰的变量成为静态变量
// 静态变量只能初始化一次
printf());
printf());
;
}
3.常量区:常量的存储区域
内存空间由系统自动分配和回收
常量区的内容只能读取,不能修改
4.代码区:所有的语句编译成二进制指令存放在代码区
存储空间由系统自动分配和回收
代码区的内容只能读取,不能修改
程序执行结束后,代码区的内存空间由系统回收
iOS学习之C语言内存管理的更多相关文章
- iOS学习之Object-C语言内存管理
一.内存管理的方式 1.iOS应用程序出现Crash(闪退),90%的原因是因为内存问题. 2.内存问题: 1)野指针异常:访问没有所有权的内存,如果想要安全的访问,必须 ...
- iOS学习之Object-C语言内存管理高级
一.属性的内存管理
- iOS学习笔记之ARC内存管理
iOS学习笔记之ARC内存管理 写在前面 ARC(Automatic Reference Counting),自动引用计数,是iOS中采用的一种内存管理方式. 指针变量与对象所有权 指针变量暗含了对其 ...
- iOS学习17之OC内存管理
1.内存管理的方式 1> iOS应用程序出现Crash(闪退),90%的原因是因为内存问题. 2> 内存问题 野指针异常:访问没有所有权的内存,如果想要安全的访问,必须确保空间还在 内存泄 ...
- 【原】iOS学习18之OC内存管理高级
1.属性的内存管理 1> 属性的语义特性 2> assign下的属性内部实现 @property (nonatomic, assign) NSString *name; @synthesi ...
- IOS学习笔记06---C语言函数
IOS学习笔记06---C语言函数 -------------------------------------------- qq交流群:创梦技术交流群:251572072 ...
- 菜鸟学习Cocos2d-x 3.x——内存管理
菜鸟学习Cocos2d-x 3.x——内存管理 2014-12-10 分类:Cocos2d-x / 游戏开发 阅读(394) 评论(6) 亘古不变的东西 到现在,内存已经非常便宜,但是也不是可以 ...
- 深入理解Linux C语言内存管理
问题不能拖,我这就来学习一下吧,争取一次搞定. 在任何程序设计环境及语言中,内存管理都十分重要. 内存管理的基本概念 分析C语言内存的分布先从Linux下可执行的C程序入手.现在有一个简单的C源程序h ...
- iOS经典面试题总结--内存管理
iOS经典面试题总结--内存管理 内存管理 1.什么是ARC? ARC是automatic reference counting自动引用计数,在程序编译时自动加入retain/release.在对象被 ...
随机推荐
- linux下DNS设置以及解析顺序
1.编辑/etc/resolv.conf文件,添加如下语句: nameserver dns_ip(例如nameserver 8.8.8.8) 2.如/etc/nsswitch.conf中未包含启用DN ...
- ansible 访问内网服务器
ssh https://medium.com/@paulskarseth/ansible-bastion-host-proxycommand-e6946c945d30#.rauzlfv0z http: ...
- 转载:SMS软件FESWMS模型使用体会
自学了SMS-FESWMS几个月,从其原理到具体应用都已经比较熟悉.感觉这个软件还是有许多不足,这也是需要进一步提高和改进的地方.下面谈谈自己的一些感受和体会. 首先,对一些比较简单的模型,软件的计算 ...
- hdu1864
use the cnt as the limit. #include <string.h> #include <stdio.h> ],sum; ]; double a,b,c; ...
- 1.7见识一下什么叫Linux驱动:LED
1.任何的Linux驱动都有一个装载函数(装载驱动时调用)和一个卸载函数(卸载驱动时调用): 2.装载函数和卸载函数分别通过module_init和module_exit宏指定.
- 用于MySql的SqlHelper
用于MySql的SqlHelper /// <summary> /// Title :MySqlHelper /// Author :WinterT /// Date :2015-1-8 ...
- kickstart简介 20140707
kickstart是红帽发行版中的一种安装方式,它通过以配置文件的方式来记录linux系统安装是的各项参数和想要安装的软件.只要配置正确, 整个安装过程中无需人工交互参与,达到无人值守安装的目的,因而 ...
- VBA添加表格
Sub 添加表格() ' If MsgBox("要为所有表格添加列吗?", vbYesNo + vbQuestion) = vbYes Then To ActiveDocument ...
- C#利用Attribute实现简易AOP介绍 (转载)
地址:http://dotnet.9sssd.com/csbase/art/638 http://wayfarer.blog.51cto.com/1300239/279913 http://devel ...
- c#获取多个List<class>合并、并将相同条件下的值累计sum
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...