今天写作业,也是好起来了呢,一道题写了2小时,就是各种错误都有,好不容易在VS2022编译正确了,结果在题目里显示 “ 段错误:您的程序发生段错误,可能是数组越界,堆栈溢出(比如,递归调用层数太多)等情况引起 ” 我的妈呀,就这个问题搞一小时了,换了好多个方法。。。
发现没结果就不去玩了,红温了快。在CPU中有一块叫ALU的部分,他的作用是逻辑运算和数学运算,不过他无法一次性计算全部,所以需要一个部分来临时储存数据,就有了寄存器(叫AX BX CX)名字真随便啊。
内存中有栈,堆(毕竟就了解了一部分,完整的要全面了解,再有一定认知再写吧),在自定义一个函数或一个main函数是就会自动申请栈区的内存内存较小,但速度快,里面一般会提供临时变量的内存空间,函数调用时也会占用空间,在这函数返回时,这部分的内存会得到解放。重要的多个栈区是互相不干扰的,所以在一个函数中想通过引用其他函数来改变自己的变量需要通过取地址的方式。
内存中拿出一部分做栈区,工作原理就像一个弹夹一样,先进后出
如图 在没有数据时栈顶和栈底是重合的,在存入信息时栈顶会被 “ 顶 ” 起来,这叫做《压栈》或《出栈》,在需要读取数据时,数据会被复制到CPU中的寄存器里,同时栈顶下压叫做《出栈》或《弹栈》,但是数据还在只是被当做了垃圾。根据这个先去后出的原理: 可以更好的理解递归这一方法,同时栈溢出(stack overflow)就是栈区的位置被填满了,所以在使用递归的时候结束条件一定要设置清楚!