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.在对象被 ...
随机推荐
- Visual Studio 2010 C++ 工程文件解读
在 VS2010 中,C++ 的工程文件已经和 2005 / 2008 有了很大的不同,而是完全采用 MSBUILD 的属性方式进行表达,并且可以让用户通过一次性的配置而对所有的属性进行自定义: 根据 ...
- 简单的TCPIP 客户端 服务器
// soClient.cpp : Defines the entry point for the console application. // #include "stdafx.h&qu ...
- WPF学习系列之七 (样式与行为)
样式(Styles)是组织和重用格式化选项的重要工具.不是使用重复的标记填充XAML,以设置诸如边距.颜色及字体等细节,而可以创建一系列封装所有这些细节的样式.然后可以在需要之处通过一个属性应用样式. ...
- 图解CISCO 3550忘记密码解决方法
图解CISCO3550忘记密码解决方法 Cisco网络设备密码忘记怎么初始出厂默认值?这时网友常常会提出的问题,怎么解决,有人说啦,去百度去谷歌一下不就行啦,然而这对初学者任是个挑战,虽然步骤只有简单 ...
- Oracle笔记 目录索引
Oracle笔记 一.oracle的安装.sqlplus的使用 Oracle笔记 二.常用dba命令行 Oracle笔记 三.function .select Oracle笔记 四.增删改.事务 Or ...
- Question2Answer初体验
Question2Answer初体验 高质量的问答社区十分有价值,很多无法解决的问题能通过问答社区找到解决办法,而对于站长来说,垂直的问答社区也很有潜力.最近盯上问答这一块,发现和我的一些思路很符 ...
- Boost C++: 网络编程1
#include <iostream> #include <boost/asio.hpp> #include <boost/config/compiler/visualc ...
- C# 多线程传参
using System; using System.Threading; //多线程调试: 2013.10.08 namespace ThreadExample { class App { publ ...
- dig out deledted chat messages
One of my friends asked me to do a favor for her. She said her friend deleted some important chat me ...
- jansen字符串转换为xml格式
/// <summary> /// json字符串转换为Xml对象 /// </summary> /// <param name="sJson"> ...