c理解提高(3)程序的内存四区模型和函数调用模型

xiaoxiao2025-04-17  11

程序的内存四区模型


内存四区的建立流程

流程说明

1、操作系统把物理硬盘代码load到内存

2、操作系统把c代码分成四个区

3、操作系统找到main函数入口执行

 

各区元素分析


函数调用模型


基本原理

内存四区模型和函数调用模型变量传递分析

1、一个主程序有n函数组成,c++编译器会建立有几个堆区?有几个栈区?

2、函数嵌套调用时,实参地址传给形参后,C++编译器如何管理变量的生命周期?

分析:函数A,调用函数B,通过参数传递的变量(内存空间能用吗?)

提示学好C语言的关键

 

如何建立正确的程序运行内存布局图

内存四区模型&函数调用模型函数内元素 深入理解数据类型和变量“内存”属性一级指针内存布局图(int *,char*)二级指针内存布局图(int ** char **)函数间 主调函数分配内存,还是被调用函数分配内存主调函数如何使用被调用函数分配的内存(技术关键点:指针做函数参数)

======》学习指针的技术路线图


训练题


内存四区强化训练

01 全局区训练

char *p1= “abcdefg”;

02 堆栈区生命周期训练

Char p1[]= “abcdefg”;返回基本类型返回非基本类型

03  堆栈属性训练

测试heap生长方向测试stack生长方向 Heap、stack生长方向和内存存放方向是两个不同概念野指针Malloc得到指针释放问题测试 free(p)free(p+1),深入理解

作业强化

   训练1   划出内存四区

void main26() {        char buf[100];        //byte b1 = new byte[100];        int a = 10; //分配4个字节的内存 栈区也叫临时区        int *p;//分配4个字节的内存        p = &a; //cpu执行的代码,放在代码区        *p = 20; //        {               char *p = NULL; //分配4个字节的内存 栈区也叫临时区               p = (char *)malloc(100); //内存泄露概念               if (p != NULL)               {                      free(p);               }        }              system("pause"); } //全局区代码测试 char * getstring1() {        char *p1 = "abcde";        return p1; } char * getstring2() {        char *p2 = "abcde";        return p2; } void main() {        int i= 0;        //指针指向谁就把谁的地址赋给指针变量。        char *p1 = getstring1();        char *p2 = getstring2();        char *******    p3 = NULL; //p3 是个变量        //指针变量和它所执行的内存空间变量是两个不同的概念        strcmp(p1, p2);        system("pause"); }

 

训练2 划出内存四区

void main01() {        char buf[100];        //byte b1 = new byte[100];        int a = 10; //分配4个字节的内存 栈区也叫临时区        int *p;//分配4个字节的内存        p = &a; //cpu执行的代码,放在代码区        *p = 20; //        {               char *p2 = NULL; //分配4个字节的内存 栈区也叫临时区               p2 = (char *)malloc(100); //内存泄露概念               if (p2 != NULL)               {                      free(p2);                      //p2 = NULL;  若不写,实验效果,分析原因               }               if (p2 != NULL)               {                      free(p2);               }        }        system("pause"); }

 

转载请注明原文地址: https://www.6miu.com/read-5028480.html

最新回复(0)