1 内存四区的建立流程

流程说明

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

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

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

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

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

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

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

3 案例

静态存储区


#include "stdio.h"//静态存储区理解
//
char * getStr1(){char *p1="abcd";return p1;
}char * getStr2(){char *p2="abcd";return p2;
}int main() {char *p1=NULL;char *p2=NULL;p1=getStr1();p2=getStr2();//打印p1 p2 所指向内存空间的数据printf("p1:%s, p2:%s \n",p1,p2);//打印p1 p2的值printf("p1:%d, p2:%d",p1,p2);//输出  全部相同; p1赋值后,p2在赋值时寻找内存中是否存在相同值,存在则替换掉;节约内存/* p1:abcd, p2:abcdp1:4210756, p2:4210756*/
}

堆栈

#include <malloc.h>
#include <string.h>
#include "stdio.h"//堆
char *getMem(int num) {char *p1 = NULL;//分配所需的内存空间,并返回一个指向它的指针p1 = (char *) malloc(sizeof(char) * num);if (p1 == NULL) {return NULL;}return p1;
}//栈 临时变量不能作为返回值返回
char *getMem2() {char buf[64];//临时变量 栈区存放strcpy(buf, "1234566");return buf;  //return 不是64个字节,而是把内存块首地址(标号)返回
}int main() {char *tem = NULL;tem = getMem(10);if (tem == NULL) {return 0;}strcpy(tem, "hehe");//向tem指向的内存空间中copy数据printf("tem:%s \n", tem);tem = getMem2(); //执行完后 buf释放printf("tem2:%s", tem);//输出    tem:hehe
//    tem2:(null)}

C 进阶学习笔记汇总

C 进阶内存四区(3)相关推荐

  1. c/c++的内存四区

    内存四区的图示 内存四区的代码案例 #include <stdio.h> void fun() {static int k = 10; //初始化的静态局部变量(data区的rw段)sta ...

  2. 【C 语言】内存四区原理 ( 内存四区建立流程 )

    文章目录 一.内存四区建立流程 一.内存四区建立流程 内存四区 建立流程 : 1. 加载代码到内存 : 操作系统 中 执行 可执行程序 , 将 存放在硬盘中的 可执行程序 ( 包含代码 ) 加载到内存 ...

  3. C语言程序的内存四区模型

    C语言程序的内存四区模型 内存四区的建立流程 流程说明 各区元素分析 内存四区的建立流程 流程说明 1.操作系统把物理硬盘代码load到内存 2.操作系统把c代码分成四个区 3.操作系统找到main函 ...

  4. 内存四区 malloc/free与new/delete的区别

    前言 之前写了一篇关于<快速排序的4种优化>的博文,当时在验证各种情况的时候忽略内存分配的问题,导致所得到的结果分析的不全面.因为在刚开始写程序的时候将数组声明在 main() 里面,这样 ...

  5. 内存四区(代码区 静态区 栈区 堆区)

    参考:内存四区(代码区 静态区 栈区 堆区) 作者:今天天气眞好 发布时间: 2021-04-01 18:09:13 网址:https://blog.csdn.net/qq_51118175/arti ...

  6. c/c++教程 - 2.1 程序的内存模型 内存四区 代码区 全局区 堆区 栈区 new操作符

    第2章为C++核心编程. 本阶段主要针对C++面向对象编程做详细讲解. 目录 1.内存分区模型 1.1 程序运行前(代码区.全局区) 1.2 程序运行后:(栈区.堆区) 1.3 new操作符(堆区内存 ...

  7. 深入理解数据类型、变量类型属性、内存四区和指针

    数据类型可理解为创建变量的模具(模子):是固定内存大小的别名. 数据类型的作用:编译器预算对象(变量)分配的内存空间大小. 既能读又能写的内存对象,称为变量:若一旦初始化后不能修改的对象则称为常量. ...

  8. C/C++之内存四区

    程序运行时,将内存大致分为四个区域 代码区:存放函数体的二进制代码,由操作系统进行管理的: 全局区:存放 全局变量和 静态变量以及 常量: 栈区:由编译器自动分配释放,存放函数的参数值,局部变量等: ...

  9. alin的学习之路:C语言篇(一)(内存四区模型,宏函数,调用惯例,内存存储方式)

    @TOC(内存四区模型,宏函数,调用惯例,内存存储方式) 1. 内存四区及其使用注意 内存四区:代码区,全局静态区,栈区,堆区 代码区 代码区存放的是CPU执行的二进制指令 特点: 只读 共享 栈区 ...

最新文章

  1. Python:TypeError: 'int' object is not callable
  2. Oracle存储结构_文件
  3. 【移动端vue ui框架学习】vue项目如何使用基于vue的UI框架mint ui
  4. Qt4小技巧——QTextEdit自动滚屏
  5. 我的YUV播放器MFC小笔记:添加删除自定义分辨率
  6. 帆软报表在已经搭载服务器上开发_史上最全企业数据产品选型对比(含数仓、报表、BI、中台、数据治理)...
  7. 大数据_Flink_数据处理_流式数据源测试---Flink工作笔记0010
  8. LabView学习笔记(九):数组与簇
  9. JAVA读取配置文件工具类
  10. 虚拟机win7纯净版镜像_win7中文版家vm虚拟机xp镜像庭普通版32位官方下载
  11. 在微信公众平台做HTML5游戏经验谈
  12. JS 页面刷新/数据刷新
  13. 软件促进两化深度融合 ——记2016中国软件和信息技术服务业发展高峰论坛
  14. 题解报告——星际战争
  15. MySQL之——基本操作汇总
  16. C# task await 等待任务完成
  17. Linux编译QT项目时报错: error: cannot find -lGL 的解决方法
  18. 任天堂FC专题 (现在还有没有人对FC感兴趣? 红白机游戏汉化)
  19. 两个瓶子水怎样一样多_大班科学领域数学活动 | 一样多的水(容积守恒)
  20. android studio导入第三方库引发的问题和解决方法

热门文章

  1. FreeBSD ZFS
  2. leetcodeLCP 19. 秋叶收藏集/动态规划
  3. QAxObject类操作Excel过程总结
  4. 如何用课件制作工具验证三角形内角和
  5. MySQL系列教程(四)
  6. NUC970 SD卡驱动(SDIO)
  7. WPS表格取消隐藏行不管用?
  8. mysql flush pri_mysql命令flush privileges
  9. 判断对象的某些属性是否为空
  10. Redis遇到过的问题(Could not get a resource from the pool)