『重点知识点』地址详解、栈帧的创建与销毁简洁版

前提

以下内容使用Visual Studio 2022集成开发环境,配置Windows 11系统,内容仅针对初学者。


目录

一、运行内存与操作系统的关系

 Ⅰ,操作系统

 Ⅱ、运行内存

二、地址

三、C语言的内存分布

四、粗略介绍函数栈帧的创建与销毁(C语言学了80%再看比较好)


一、运行内存与操作系统的关系

 Ⅰ,操作系统

市面上常见的有32位和64位操作系统。对于32位操作系统而言,在CPU内部有32根地址线,每一根地址线分为带电和不带电两种,对应1或0。于是就有了32位的二进制序列。

这2^32种二进制就称作地址,每一个地址指向一个字节,所以32位操作系统最高能控制的空间为,2^32byte等于4GB,即最高运行内存为4GB。64位操作系统同理,但在市面上很难看到64位操作系统最高运行内存,原因目前的技术造价特别高,做工也特别复杂,所以很少见运行内存很高的。

 Ⅱ、运行内存

运行内存是系统运行时可用的存储空间,当你运行一个软件时系统会给他分配运行内存,用来存储必要的数据。


二、地址

由第一节已知地址是一串二进制序列,每一个地址指向一个字节

 每个地址只指向一个字节,把字节看作房间,地址就是房间的门牌号。由此我们可以通过门牌号(地址)访问数据。


三、C语言的内存分布

①栈区:栈区用来存放局部变量、函数的形参、返回值。

②堆区:可用来申请内存空间存储数据(如malloc、calloc、realloc函数申请的空间就在堆上,需要手动申请,用完之后需要释放内存,否则会导致内存泄漏),堆的大小不一,可扩大或缩小。

③方法区:方法区也叫代码区,用来存放二进制形式的函数代码段。

④静态分布区:用来存放全局变量、静态变量。

⑤常量区:用来存放一种字面常量形式。


四、粗略介绍函数栈帧的创建与销毁(C语言学了80%再看比较好)

前提知识:寄存器ebp和esp,这两个寄存器中存放的是地址,用来维护函数栈帧的。具体维护如下。

示例代码:

#include <stdio.h>
int add(int x, int y)
{
	int z = x + y;
	return z;
}
int main()
{
	int a = 5;
	int b = 3;
    int c = add(a, b);
	return 0;
}

 

 

 用汇编解释栈帧的创建与销毁——><函数栈帧的创建与销毁完整版(创作中)>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寒夕君哎

动力+99(*•̀ᴗ•́*)و

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值