C、C++指针深度剖析.pptVIP

  • 5
  • 0
  • 约1.2千字
  • 约 10页
  • 2016-11-27 发布于河南
  • 举报
C、C指针深度剖析

剖析C语言精华指针(一) 2015-07-08 内存 一、从变量的Scope开始 变量类型: 局部变量 全局变量 静态变量 请问代码中,哪些是局部变量?哪些是全局变量?哪些是静态变量? 变量的存贮 内存:变量的存储位置 不同Scope的变量,存储在不同内容区域;这反映了运算时变量不同的特性。 内存类型: 内存分为静态内存和动态内存,动态内存又可以分为堆内存和栈内存。内存分配方式相应的分为静态存储区域分配、栈创建、堆分配。 静态存储区域分配 程序在编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。 例如前面例子中的变量(int pi),静态变量(static int c)和常量。 栈创建 函数执行的时候,函数内的局部变量(包括函数形参)的存储单元都是在栈上创建的,函数执行后占用栈的存储单元会自动被释放。这种分配效率很高,但是分配的内存容量有限。占用栈内存多了,会出现栈溢出; 例如函数area参数(int r,int *sum)和局部变量就是栈创建的。 堆分配 也称为动态存储分配,是指程序在运行时候用malloc函数申请的内存,程序员自己负责在何时用free函数释放内存,这种分配跃然灵活,但是使用时容易出错, 需要注意。 分为4个区域 内存分配和释放 指针 一、地址和指针的概念 内存区的每个字节有一个编号,这就是“地址”。如果在程序中定义了一个变量,在对应程序编译时,系统就会给这个变量分配内存单元。 1、按变量地址存取变量值的方式 称为“直接访问”方式 剖析C语言精华指针(二) 时间再定 * QQ:784607615 QQ:784607615 QQ:192777761 数据区 代码区(程序区) 栈区auto 存放程序的局部数据和参数 静态区static 存放程序的全局数据和静态数据 堆区heap 存放程序动态申请的数据 代码区code 存放程序的代码 内存(Memory) 在适当时机由程序员用free释放 程序员根据需要用malloc,calloc等创建的内存 堆内存 函数退出时释放,不用程序员参与 是函数调用的创建的。函数入栈前会为函数、函数参数、函数中定义的变量在栈里申请空间。 栈内存 程序退出时释放,不用程序员参与 这种内存编译的时候就分配好的,这种内存在程序运行期间一直存在。由编译器负责分配。 静态内存 释放时机/释放责任 分配时机/分配责任 … … 150 250 随机值(-858993460) … … 1638212 … … 内存用户数据区 变量i 变量j 变量k 1638212 1638208 1638204 指针变量pi 1638200 * QQ:784607615 QQ:784607615 * *

文档评论(0)

1亿VIP精品文档

相关文档