细讲内存四区

目录

1.1数据类型本质分析

1.1.1数据类型概念

1.1.2数据类型的本质

1.1.3给类型起别名--typedef

1.1.4void类型

1.2变量的本质分析

1.2.1变量的概念

1.2.2变量的本质

1.3程序的内存四区模型

1.3.1栈区和堆区

1.3.2静态区

1.4函数的调用模型

1.5函数调用变main量传递分析

1.6栈的生长方向和内存存放方向


1.1数据类型本质分析

1.1.1数据类型概念

  • “类型”是对数据的抽象
  • 类型相同的数据有相同的表示形式、存储格式以及相关的操作
  • 程序中使用的所有数据都必定属于某一种数据类型

数据类型的本质思考:

1.思考数据类型和内存有什么关系吗?

2.c/c++为什么会引入数据类型?

1.1.2数据类型的本质

  • 数据类型可理解为创建变量的模具:是固定内存大小的别名
  • 数据类型的作用:编译器预算对象(变量)分配的内存空间大小
  • 注意:数据类型只是模具,编译器病美欧分配空间,只有根据类型(模具)创建变量(实物),编译器才会分配空间

举例:

#include<stdio.h>
int main()
{
   int b[10]={0};
   printf("b:%d,&b:%d",b,&b);
   //b,&b的数组类型不一样
   //b--数组首元素地址,一个元素4个字节 +1=+4
   //&b--整个数组的首元素地址,一个数组4*10=40个字节 +1=+40
   printf("b+1:%d,&b+1:%d",b+1,&b+1);
   return 0;
}

1.1.3给类型起别名--typedef

//typedef和结构体结合使用

#include<stdio.h>
struct MyStruct
{
   int a;
   int b;
};
typedef struct MyStruct
{
   int a;
   int b;
}TMP;
int main()
{
   //定义结构体变量,一定要加上struct关键字
   struct MyStruct m1;
   
   //
   TMP m1;
   return 0;
}

1.1.4void类型

  • 函数参数为空,定义函数时,可以用void修饰,int fun(void)
  • 函数没有返回值,void fun(void);
  • 不能定义void类型的普通变量,void a;//err 因为编译器不能为变量分配具体的
  • 可以定义void*变量,void* p;  //ok
  • 数据类型本质,固定内存块大小别名
  • void* p万能指针,函数返回值,函数参数

1.2变量的本质分析

1.2.1变量的概念

概念:既能读又能写的内存对象,称为变量;若一旦初始化后不能修改的对象则称为常量。

变量定义形式:类型 标识符,标识符,标识符;

1.2.2变量的本质

1.程序通过变量来申请和命名内存空间 int a=0.

2.通过变了名访问内存空间

变量:一段连续内存空间的别名

1.3程序的内存四区模型

1.3.1栈区和堆区

用代码来分析:

#include<stdio.h>
#include<string.h>
char* get_str1(void)
{
	char str[] = "ahjkajdihda";//栈区
	printf("str=%s\n", str);
	return str;
}
char* get_str2(void)
{
	char* tmp = (char*)malloc(100);//堆区
	if (tmp == NULL)
	{
		return NULL;
	}
	strcpy(tmp, "kasdjioasdjkas");
	return tmp;
}
int main(void)
{
	char buf[128] = { 0 };

	strcpy(buf, get_str1());
	printf("buf=%s\n", buf);//乱码,不确定

	char* p = NULL;
	p = get_str2();
	if (p != NULL)
	{
		printf("p=%s\n", p);
		free(p);
		p = NULL;
	}
	return 0;
}

1.3.2静态区

#include<stdio.h>
int* getA()
{
	static int a = 10;//变量a在静态区/全局区 
	return &a;
}
int main()
{
	int* p = getA();
	//函数getA()调用完之后a不会释放
	printf("\n");
	system("pause");
	return 0;
}

1.4函数的调用模型

  • main函数在栈区开辟的内存,所有子函数均可以使用
  • main函数在堆区开辟的内存,所有子函数均可以使用
  • 子函数1在栈区开辟的内存,子函数1和子函数2均可以使用
  • 子函数2在全局区开辟的内存,子函数1和main均可以使用

1.5函数调用变main量传递分析

1.6栈的生长方向和内存存放方向

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/502816.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AcWing 1413. 矩形牛棚(每日一题)

原题链接&#xff1a;1413. 矩形牛棚 - AcWing题库 作为一个资本家&#xff0c;农夫约翰希望通过购买更多的奶牛来扩大他的牛奶业务。 因此&#xff0c;他需要找地方建立一个新的牛棚。 约翰购买了一大块土地&#xff0c;这个土地可以看作是一个 R 行&#xff08;编号 1∼R&…

在Arduino IDE中使用文件夹组织源文件和头文件

在Arduino IDE中使用文件夹组织源文件和头文件 如果你是一名Arduino爱好者&#xff0c;你可能会发现随着项目的复杂度增加&#xff0c;代码的管理变得越来越困难。在Arduino IDE中&#xff0c;你可以通过使用文件夹来更好地组织你的源文件和头文件&#xff0c;使得代码更加清晰…

Python 妙用运算符重载——玩出“点”花样来

目录 运算符重载 主角点类 魔法方法 __getitem__ __setitem__ __iter__ __next__ __len__ __neg__ __pos__ __abs__ __bool__ __call__ 重载运算符 比较运算符 相等 不等 ! 大于和小于 >、< 大于等于和小于等于 >、< 位运算符 位与 & 位…

win11 环境配置 之 Jmeter(JDK17版本)

一、安装 JDK 1. 安装 jdk 截至当前最新时间&#xff1a; 2024.3.27 jdk最新的版本 是 官网下载地址&#xff1a; https://www.oracle.com/java/technologies/downloads/ 建议下载 jdk17 另存为到该电脑的 D 盘下&#xff0c;新建jdk文件夹 开始安装到 jdk 文件夹下 2. 配…

基于reactor模式的简易web服务器

文章目录 基于reactor模式的tcp服务器什么是reactor模式&#xff1f;实现步骤 修改recv_cb逻辑变成web服务器web服务器性能测试&#xff08;wrk工具的使用&#xff09; 基于reactor模式的tcp服务器 本文基于上篇的简易tcp通信服务器基础 上进行封装&#xff0c;写出使用epoll的…

递归方法的理解

递归方法调用 &#xff1a;方法自己调用自己的现象就称为递归。 递归的分类 : 直接递归、间接递归。 直接递归&#xff1a;方法自身调用自己 public void methodA (){ methodA (); } 间接递归&#xff1a;可以理解为A()方法调用B()方法&#xff0c;B()方法调用C()方法&am…

fastllm在CPU上推理ChatGLM3-6b,即使使用CPU依然推理速度很快,就来看这篇文章

介绍: GitHub - ztxz16/fastllm: 纯c++的全平台llm加速库,支持python调用,chatglm-6B级模型单卡可达10000+token / s,支持glm, llama, moss基座,手机端流畅运行纯c++的全平台llm加速库,支持python调用,chatglm-6B级模型单卡可达10000+token / s,支持glm, llama, moss基…

【实验报告】--基础VLAN

【VLAN实验报告】 一、项目背景 &#xff08;为 Jan16 公司创建部门 VLAN&#xff09; Jan16 公司现有财务部、技术部和业务部&#xff0c;出于数据安全的考虑&#xff0c;各部门的计算机需进 行隔离&#xff0c;仅允许部门内部相互通信。公司拓扑如图 1 所示&#xff0c; …

安装uim-ui插件不成功,成功解决

安装&#xff1a;这种安装&#xff0c;umi4 不支持&#xff0c;只有umi3才支持。而我发现官网现在默认使用的umi4。 yarn add umijs/preset-ui -D 解决&#xff1a;更改umi版本重新安装umi3 npm i ant-design/pro-cli3.1.0 -g #使用umi3 (指定umi3版本) pro create user-ce…

什么是防火墙,部署防火墙有什么好处?

与我们的房屋没有围墙或界限墙一样&#xff0c;没有防护措施的计算机和网络将容易受到黑客的入侵&#xff0c;这将使我们的网络处于巨大的风险之中。因此&#xff0c;就像围墙保护我们的房屋一样&#xff0c;虚拟墙也可以保护和安全我们的设备&#xff0c;使入侵者无法轻易进入…

WEB APIS知识点案例总结

随机点名案例 业务分析: 点击开始按钮随机抽取数组中的一个数据,放到页面中点击结束按钮删除数组当前抽取的一个数据当抽取到最后一个数据的时候,两个按钮同时禁用(只剩最后一个数据不用抽了) 核心:利用定时器快速展示,停止定时器结束展示 <!DOCTYPE html> <html…

【送书福利第六期】:《AI绘画教程:Midjourney使用方法与技巧从入门到精通》

文章目录 一、《AI绘画教程&#xff1a;Midjourney使用方法与技巧从入门到精通》二、内容介绍三、作者介绍&#x1f324;️粉丝福利 一、《AI绘画教程&#xff1a;Midjourney使用方法与技巧从入门到精通》 一本书读懂Midjourney绘画&#xff0c;让创意更简单&#xff0c;让设计…

小米SU7 我劝你再等等

文 | AUTO芯球 作者 | 李逵 我必须承认我一时没忍住 犯错了 我不会被我老婆打吧 感觉有点慌呀 这不前两天 我刚提了台问界M9嘛 但是昨晚看小米汽车发布会 是真的被雷总感染到了 真的没忍住 我又冲了台小米SU7 Pro版 本来我是准备抢创始版的 结果1秒钟时间 点进去就…

Java基础语法(六)| 类和对象

前言 Hello&#xff0c;大家好&#xff01;很开心与你们在这里相遇&#xff0c;我是一个喜欢文字、喜欢有趣的灵魂、喜欢探索一切有趣事物的女孩&#xff0c;想与你们共同学习、探索关于IT的相关知识&#xff0c;希望我们可以一路陪伴~ 1. 面向对象概述 1.1 什么是面向对象 Ja…

【毕业论文】| 基于Unity3D引擎的冒险游戏的设计与实现

&#x1f4e2;博客主页&#xff1a;肩匣与橘 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由肩匣与橘编写&#xff0c;首发于CSDN&#x1f649; &#x1f4e2;生活依旧是美好而又温柔的&#xff0c;你也…

字符串(KMP)

P3375 【模板】KMP - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<iostream> #include<algorithm> #include<cstdio> #include<cstring> using namespace std; #define ll long long const int N1e6100; int n0,m; char s1[N]; char s2[N];…

【MATLAB源码-第22期】基于matlab的手动实现的(未调用内置函数)CRC循环码编码译码仿真。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 循环码是线性分组码的一种&#xff0c;所以它具有线性分组码的一般特性&#xff0c;此外还具有循环性。循环码的编码和解码设备都不太复杂&#xff0c;且检(纠)错能力强。它不但可以检测随机的错误&#xff0c;还可以检错突发…

2024年大广赛联通沃派命题解析:赛题内容一览

2024大广赛又又又又又出新命题了&#xff0c;它就是助力青少年积极向上&#xff0c;乐观自信&#xff0c;探享多彩人生的5G时代潮牌——联通沃派&#xff0c;让我们来看看命题详情吧&#xff01; 联联通沃派是中国联通面向青少年群体推出的客户品牌&#xff0c;契合目标群体特…

数据结构 - 图

参考链接&#xff1a;数据结构&#xff1a;图(Graph)【详解】_图数据结构-CSDN博客 图的定义 图(Graph)是由顶点的有穷非空集合 V ( G ) 和顶点之间边的集合 E ( G ) 组成&#xff0c;通常表示为: G ( V , E ) &#xff0c;其中&#xff0c; G 表示个图&#xff0c; V 是图 G…

某东推荐的十大3C热榜第一名!2024随身wifi靠谱品牌推荐!2024随身wifi怎么选?

一、鼠标金榜&#xff1a;戴尔 商务办公有线鼠标 售价:19.9&#xffe5; 50万人好评 二、平板电脑金榜&#xff1a;Apple iPod 10.2英寸 售价:2939&#xffe5; 200万人好评 三、随身WiFi金榜&#xff1a;格行随身WiFi 售价:69&#xffe5; 15万人好评 四、游戏本金榜&#xff…