[其他] 内存相关注意事项

[复制链接]
5006|10
 楼主| 小夏天的大西瓜 发表于 2024-2-28 09:00 | 显示全部楼层 |阅读模式
1185265ddf04f8d323.png

需要注意以下几点:

栈是从高地址向低地址方向增长;
在C语言中,函数参数的入栈顺序是从右到左,因此UpdateCounter函数的3个参数入栈顺序是a1、c、b;
C语言中形参和实参之间是值传递,UpdateCounter函数里的参数a[1]、c、b与静态区的a[1]、c、b不是同一个;
"char *b = NULL"定义一个指针变量b,b的地址是0xFFF8,值为空-->运行到"b = (char*)malloc(1024*sizeof(char))"时才在堆中申请了一块内存(假设这块内存地址为0x77a0080)给了b,此时b的地址并没有变化,但其值变为了0x77a0080,这个值指向了一个堆空间的地址(栈变量的值指向了堆空间),这个过程b的内存变化如下:


5552165ddf071109c7.png
tpgf 发表于 2024-3-5 12:22 | 显示全部楼层
我们如何动态监测对内存的占用情况呢
heimaojingzhang 发表于 2024-3-5 13:37 | 显示全部楼层
有哪些位置的内存是对用户不开放的呢
keaibukelian 发表于 2024-3-5 14:11 | 显示全部楼层
不同的单片机  堆和栈所占用地址的位置和长度是相同的吗
paotangsan 发表于 2024-3-5 18:29 | 显示全部楼层
keaibukelian 发表于 2024-3-5 14:11
不同的单片机  堆和栈所占用地址的位置和长度是相同的吗

不一定是相同的 这个可以在芯片手册里边看到内存的空间分配图表
guanjiaer 发表于 2024-3-5 19:02 | 显示全部楼层
如果写入到非法地址的话 在编译阶段会有报错或者警告信息吗
观海 发表于 2024-3-5 19:35 | 显示全部楼层
如果仅仅是使用c语言编程的话 我们还需要关心存储的地址的高低吗
Jacquetry 发表于 2024-3-28 10:38 来自手机 | 显示全部楼层
数组越界编译器会报错的
jf101 发表于 2024-3-28 16:18 | 显示全部楼层
栈是从高地址向低地址方向增长;
OKAKAKO 发表于 2024-4-24 14:21 | 显示全部楼层
guanjiaer 发表于 2024-3-5 19:02
如果写入到非法地址的话 在编译阶段会有报错或者警告信息吗

一般情况下非法地址编译器会发现的,就怕数据超限问题不容易发现
OKAKAKO 发表于 2024-4-24 14:22 | 显示全部楼层
内存这个确实是非常重要的一个使用方面
您需要登录后才可以回帖 登录 | 注册

本版积分规则

273

主题

2390

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部