C 进阶内存四区(3)
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)相关推荐
- c/c++的内存四区
内存四区的图示 内存四区的代码案例 #include <stdio.h> void fun() {static int k = 10; //初始化的静态局部变量(data区的rw段)sta ...
- 【C 语言】内存四区原理 ( 内存四区建立流程 )
文章目录 一.内存四区建立流程 一.内存四区建立流程 内存四区 建立流程 : 1. 加载代码到内存 : 操作系统 中 执行 可执行程序 , 将 存放在硬盘中的 可执行程序 ( 包含代码 ) 加载到内存 ...
- C语言程序的内存四区模型
C语言程序的内存四区模型 内存四区的建立流程 流程说明 各区元素分析 内存四区的建立流程 流程说明 1.操作系统把物理硬盘代码load到内存 2.操作系统把c代码分成四个区 3.操作系统找到main函 ...
- 内存四区 malloc/free与new/delete的区别
前言 之前写了一篇关于<快速排序的4种优化>的博文,当时在验证各种情况的时候忽略内存分配的问题,导致所得到的结果分析的不全面.因为在刚开始写程序的时候将数组声明在 main() 里面,这样 ...
- 内存四区(代码区 静态区 栈区 堆区)
参考:内存四区(代码区 静态区 栈区 堆区) 作者:今天天气眞好 发布时间: 2021-04-01 18:09:13 网址:https://blog.csdn.net/qq_51118175/arti ...
- c/c++教程 - 2.1 程序的内存模型 内存四区 代码区 全局区 堆区 栈区 new操作符
第2章为C++核心编程. 本阶段主要针对C++面向对象编程做详细讲解. 目录 1.内存分区模型 1.1 程序运行前(代码区.全局区) 1.2 程序运行后:(栈区.堆区) 1.3 new操作符(堆区内存 ...
- 深入理解数据类型、变量类型属性、内存四区和指针
数据类型可理解为创建变量的模具(模子):是固定内存大小的别名. 数据类型的作用:编译器预算对象(变量)分配的内存空间大小. 既能读又能写的内存对象,称为变量:若一旦初始化后不能修改的对象则称为常量. ...
- C/C++之内存四区
程序运行时,将内存大致分为四个区域 代码区:存放函数体的二进制代码,由操作系统进行管理的: 全局区:存放 全局变量和 静态变量以及 常量: 栈区:由编译器自动分配释放,存放函数的参数值,局部变量等: ...
- alin的学习之路:C语言篇(一)(内存四区模型,宏函数,调用惯例,内存存储方式)
@TOC(内存四区模型,宏函数,调用惯例,内存存储方式) 1. 内存四区及其使用注意 内存四区:代码区,全局静态区,栈区,堆区 代码区 代码区存放的是CPU执行的二进制指令 特点: 只读 共享 栈区 ...
最新文章
- Python:TypeError: 'int' object is not callable
- Oracle存储结构_文件
- 【移动端vue ui框架学习】vue项目如何使用基于vue的UI框架mint ui
- Qt4小技巧——QTextEdit自动滚屏
- 我的YUV播放器MFC小笔记:添加删除自定义分辨率
- 帆软报表在已经搭载服务器上开发_史上最全企业数据产品选型对比(含数仓、报表、BI、中台、数据治理)...
- 大数据_Flink_数据处理_流式数据源测试---Flink工作笔记0010
- LabView学习笔记(九):数组与簇
- JAVA读取配置文件工具类
- 虚拟机win7纯净版镜像_win7中文版家vm虚拟机xp镜像庭普通版32位官方下载
- 在微信公众平台做HTML5游戏经验谈
- JS 页面刷新/数据刷新
- 软件促进两化深度融合 ——记2016中国软件和信息技术服务业发展高峰论坛
- 题解报告——星际战争
- MySQL之——基本操作汇总
- C# task await 等待任务完成
- Linux编译QT项目时报错: error: cannot find -lGL 的解决方法
- 任天堂FC专题 (现在还有没有人对FC感兴趣? 红白机游戏汉化)
- 两个瓶子水怎样一样多_大班科学领域数学活动 | 一样多的水(容积守恒)
- android studio导入第三方库引发的问题和解决方法