• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

问题的答案是什么啊?愁死个人

晴川雨何 2017-03-20 浏览量:846
 
fn()
{
 u8 buf[512];
 ……
}
main()
{
 u8 buf[1024];
 fn(); // 执行到fn内部被中断入栈1536字节
 …… // 入栈1024字节
}
问:   1024字节的局部数组在任意时候都会占据1024字节的栈区吗   ?  
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 楼主对照这个理解下~
    void main()
    {
        int a[1024]={0.0};//在栈里
    
        processing();
    //processing()中的int b[1024]被回收了,因为int b没有在作用域中具有生命周期了
    }
    //程序在此运行结束,int a[1024]={0.0};也被回收
    void processing(void)
    {
        int b[1024]={0.0};//也在栈里

    }

    • 发布于 2017-03-21
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:13
  • 局部变量在这个函数执行完后就释放了,除非是手动创建的。不过在main里,这个1024是不能释放的。
    • 发布于2017-03-20
    • 举报
    • 评论 0
    • 0
    • 0

  • 不是

    在这个栈被用完之后这些空间就会被释放,不过对于编译器来说,它会让汇编语言自动保留一个区域的堆栈空间,这个空间会被永久占用,这是为了防止堆栈区被占用导致的错误

    • 发布于2017-03-20
    • 举报
    • 评论 0
    • 0
    • 0

  • 您宣告就會佔用了,但在51會有比較特殊的Memory management,叫做data overlaying

    所以實際上是會重疊在一起但不會影響使用,這編譯器會為您做好這件事,可參考以下說明

    所謂 data overlaying 是指沒有呼叫關係的函數,它們的區域變數區可以重疊在一起(共用一塊記憶體)。Keil C51 會分析程式中函數間呼叫的關係,產生一個呼叫樹。它就根據這個呼叫樹來決定那些函數的區域變數區可以 overlaying 在一起。

    以上供參考

    • 发布于2017-03-20
    • 举报
    • 评论 0
    • 0
    • 0

  • 在主函数里面应该不会释放的


    • 发布于2017-03-20
    • 举报
    • 评论 0
    • 0
    • 0

  • 在主函数里面应该不会释放的


    • 发布于2017-03-20
    • 举报
    • 评论 0
    • 0
    • 0

  • 在主函数里面应该不会释放的


    • 发布于2017-03-20
    • 举报
    • 评论 0
    • 0
    • 0

  • 在主函数里面应该不会释放的


    • 发布于2017-03-20
    • 举报
    • 评论 0
    • 0
    • 0

  • 在主函数里面应该不会释放的


    • 发布于2017-03-20
    • 举报
    • 评论 0
    • 0
    • 0

  • 在主函数里面应该不会释放的


    • 发布于2017-03-20
    • 举报
    • 评论 0
    • 0
    • 0

  • 在主函数里面应该不会释放的


    • 发布于2017-03-20
    • 举报
    • 评论 0
    • 0
    • 0

  • 在主函数里面应该不会释放的


    • 发布于2017-03-20
    • 举报
    • 评论 0
    • 0
    • 0

  • 这用法我也是醉了,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]啊!!!

    • 发布于2017-03-21
    • 举报
    • 评论 0
    • 0
    • 0

  • 主函数中宣告的在任何时候都会占用的
    • 发布于2017-03-21
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

问题的答案是什么啊?愁死个人