堆栈作用及其区别

堆栈: 堆和栈都是内存中分配的一块有限的区域,用来分配存放各种数据
new的对象放在堆中,保存在堆中的数据,如果不使用delete释放掉的话,就会堆积在堆区里面,要是长期积累的话,就会导致堆区沾满,导致系统崩溃的情况

堆的作用:堆的内存是有程序员自己分配的,在使用了malloc()或者new之后,系统会从堆中查找大小合适的空位,并将地址返回,数据就存在那里,对的内存是随机分配的,可能会出现小块的空缺,导致塞不下大块的数据,出现碎片化的问题

栈的作用:栈是由系统自动分配给局部变量或函数参数的,并且紧致的朝一个方向分配,
先进后出的原则,就像是在一个盒子中,放东西

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
Kernel panic 是指 Linux 内核遇到了无法继续执行的致命错误,此时会在屏幕上输出一些错误信息,其中就包括堆栈信息。堆栈信息是指发生错误时 CPU 执行的代码路径,可以通过堆栈信息来定位错误发生的位置。 通常,堆栈信息会以类似下面的形式输出: ``` Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b CPU: 0 PID: 1 Comm: init Not tainted 4.4.0-31-generic #50-Ubuntu Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Ubuntu-1.8.2-1ubuntu1 04/01/2014 ffffffff813f7ab7 ffff8800363c7e00 ffffffff817e0c5d 0000000000000000 ffff8800363c7e38 ffff8800363c7e20 ffffffff8108124c ffff8800363c7e58 ffffffff810812a2 ffffffff81862f78 ffffffff81862f68 ffffffff81862f68 Call Trace: [<ffffffff813f7ab7>] dump_stack+0x63/0x82 [<ffffffff817e0c5d>] panic+0xc8/0x1fe [<ffffffff8108124c>] do_exit+0x6d4/0x6e0 [<ffffffff810812a2>] do_group_exit+0x42/0xa0 [<ffffffff8108a300>] get_signal+0x2f8/0x5c0 [<ffffffff81015eb5>] do_signal+0x55/0x6d0 [<ffffffff8108f9cc>] ? __fget_light+0x3c/0x50 [<ffffffff81011c2b>] do_notify_resume+0x9b/0xc0 [<ffffffff817fba0c>] int_signal+0x12/0x17 ``` 堆栈信息的最后一行是 `Call Trace:`,接下来的几行是函数调用栈,每一行都是一个函数调用,最上面的是发生错误的函数,最下面的是最开始的函数。 在上面的例子中,发生错误的函数是 `panic+0xc8/0x1fe`,它是由函数 `do_exit+0x6d4/0x6e0` 调用的,而 `do_exit` 又是由函数 `do_group_exit+0x42/0xa0` 调用的,以此类推,直到最下面的 `int_signal+0x12/0x17`,它是被中断处理程序调用的。 通过分析堆栈信息,可以找到发生错误的函数及其调用关系,从而定位错误原因。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

scvwengf

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值