打印
[其他]

内存相关注意事项

[复制链接]
1564|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主


需要注意以下几点:

栈是从高地址向低地址方向增长;
在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的内存变化如下:



使用特权

评论回复
沙发
tpgf| | 2024-3-5 12:22 | 只看该作者
我们如何动态监测对内存的占用情况呢

使用特权

评论回复
板凳
heimaojingzhang| | 2024-3-5 13:37 | 只看该作者
有哪些位置的内存是对用户不开放的呢

使用特权

评论回复
地板
keaibukelian| | 2024-3-5 14:11 | 只看该作者
不同的单片机  堆和栈所占用地址的位置和长度是相同的吗

使用特权

评论回复
5
paotangsan| | 2024-3-5 18:29 | 只看该作者
keaibukelian 发表于 2024-3-5 14:11
不同的单片机  堆和栈所占用地址的位置和长度是相同的吗

不一定是相同的 这个可以在芯片手册里边看到内存的空间分配图表

使用特权

评论回复
6
guanjiaer| | 2024-3-5 19:02 | 只看该作者
如果写入到非法地址的话 在编译阶段会有报错或者警告信息吗

使用特权

评论回复
7
观海| | 2024-3-5 19:35 | 只看该作者
如果仅仅是使用c语言编程的话 我们还需要关心存储的地址的高低吗

使用特权

评论回复
8
Jacquetry| | 2024-3-28 10:38 | 只看该作者
数组越界编译器会报错的

使用特权

评论回复
9
jf101| | 2024-3-28 16:18 | 只看该作者
栈是从高地址向低地址方向增长;

使用特权

评论回复
10
OKAKAKO| | 2024-4-24 14:21 | 只看该作者
guanjiaer 发表于 2024-3-5 19:02
如果写入到非法地址的话 在编译阶段会有报错或者警告信息吗

一般情况下非法地址编译器会发现的,就怕数据超限问题不容易发现

使用特权

评论回复
11
OKAKAKO| | 2024-4-24 14:22 | 只看该作者
内存这个确实是非常重要的一个使用方面

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

168

主题

1397

帖子

1

粉丝