'[;[;[;[;之之[之[;[;

在网上查了些资料没有解决,检查玳码发现

@PostMapping忘了写路径了(;д;)加上路径就好了

注:博客中内容主要来自《狄泰軟件学院》博客仅当私人笔记使用。

一、程序中的栈(行为:后进先出)

1) 栈是现代计算机程序里最为重要的概念之一

2) 栈在程序中用于维護函数调用上下文

3) 函数中的参数和局部变量存储在栈上

4) 栈保存了一个函数调用所需的维护信息

1) 每次函数调用都对应着一个栈上的活动记录

    - 被调函数的活动记录位于栈的顶部(被调用的函数g()需要出栈放在栈顶)

2) 函数调用的栈变化一

3) 函数调用的栈变化二

f()的Old ebp是为了执行完函数后跳回進入函数main()时的地址。

4) 函数调用的栈变化三

f()通过ebp返回之前的地址esp也会回退,但是原来栈中的内存数据没有立即消失之前提到过函数不要返回局部变量地址或者局部数组,是因为如果main()函数中的f()返回地址后如果立即调用其它函数,可能会产生野指针新的函数覆盖到了f()当时存储的区域!

5) 函数调用栈上的数据

1. 函数调用时,对应的栈空间在函数返回前是专用的

2. 函数调用结束后栈空间将被释放数据不再有效

 
 //为叻证明栈空间数据返回可能出错注释掉
 
 printf("%d\n",b[i]); //为了证明栈空间数据返回可能出错,注释掉修改如下
 
 

警告:函数返回局部变量地址(返回了局部數组地址)
 
0
0
 

pointer指向的数组,每个元素数值都为0因此这里打印0。但是g()函数返回后栈空间中的值是会被改变。
 
 
 
警告:返回局部变量地址
 
0
 









1) 堆是程序中一块预留的内存空间可由程序自由使用


2) 堆中被程序申请使用的内存在被主动释放前将一直有效





栈上的数据在函数返回后就会被释放掉,无法传递到函数外部如:局部数组


3) C语言程序中通过库函数的调用获得堆空间











4) 系统对堆空间的管理方式








遍历内存大小,对比申请的内存和节点空间大小如果大小接近就使用。之前提到为什么申请的堆空间比自己申请的大因为链表节点占用一些大小!


四、程序中的静態存储区(编译时就知道大小,运行时才分配空间)rodata


1) 静态存储区随着程序的运行而分配空间


2) 静态存储区的生命周期直到程序运行结束


3) 在程序的编译期静态存储区的大小就已经确定


4) 静态存储区主要用于保存全局变量和静态局部变量


5) 静态存储区的信息最终会保存到可执行程序中


 
 
 
 
 

 


證实:大小和位置编程序编译期就确定了

1) 静态存储区是程序中的三个基本数据区

- 堆区主要是用于内存的动态申请和归还(不归還会导致内存泄露程序运行越来越慢,直到崩溃)
- 静态存储区用于保存全局变量和静态变量(编译阶段就固定了静态存储区大小)

我要回帖

更多关于 39所 的文章

 

随机推荐