完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
fn() { u8 buf[512]; …… } main() { u8 buf[1024]; fn(); // 执行到fn内部被中断入栈1536字节 …… // 入栈1024字节 } 问: 1024字节的局部数组在任意时候都会占据1024字节的栈区吗 ? |
|
相关推荐
13个回答
|
|
|
|
|
|
|
|
|
|
邀请回答
您宣告就會佔用了,但在51會有比較特殊的Memory management,叫做data overlaying 所以實際上是會重疊在一起但不會影響使用,這編譯器會為您做好這件事,可參考以下說明 所謂 data overlaying 是指沒有呼叫關係的函數,它們的區域變數區可以重疊在一起(共用一塊記憶體)。Keil C51 會分析程式中函數間呼叫的關係,產生一個呼叫樹。它就根據這個呼叫樹來決定那些函數的區域變數區可以 overlaying 在一起。 以上供參考 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
云汉达人 邀请回答
这用法我也是醉了,aaa bbb这样的名字多好。 这个局部buf,你看他是个名字跟main函数的buf一样的数组。在电脑眼里却只是个地址,而且此buf的地址不是彼buf的地址。 人类的思维可能不好理解。但是对电脑来说很简单。虽然变量名一样了,但一个只是在函数里面局部的,在它眼里,这是两个不同的地址。 fn函数的局部buf,按你给的代码就是512个u8类型。 当进入fn这个函数的时候,会用掉512个u8,执行完就释放了。 word天啊,我的大脑已经短路了。 为什么不是u8 aaa[512]啊!!! 为什么不是u8 aaa[512]啊!!! 为什么不是u8 aaa[512]啊!!! 为什么不是u8 aaa[512]啊!!! |
|
|
|
主函数中宣告的在任何时候都会占用的
|
|
|
|
只有小组成员才能发言,加入小组>>
793 浏览 0 评论
1152 浏览 1 评论
2528 浏览 5 评论
2861 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2711 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1073浏览 3评论
195浏览 2评论
457浏览 2评论
370浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
455浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 04:51 , Processed in 1.288214 second(s), Total 104, Slave 85 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号