[C++]笔记-函数的栈空间(避免栈空间溢出)

  • 错误1 当数组的内存占用较大时,会引发异常
#include 
using namespace std;
int main() {

    char buff[2000000];
    cout << (int)buff[sizeof(buff) - 1] << endl;

 [C++]笔记-函数的栈空间(避免栈空间溢出)_第1张图片

  •  错误 2
    • 当调用次数较小的时候,栈内存还没有满,可以输出,该地址相减除以1024等于100,就是每调用一次函数,分配的内存数,

[C++]笔记-函数的栈空间(避免栈空间溢出)_第2张图片

  • 当调用函数次数较大时候,栈内存爆掉了,就会引发异常
  • 当n=20时候

[C++]笔记-函数的栈空间(避免栈空间溢出)_第3张图片

  •  内联函数inline:
    • 可以解决该函数调用时间上的问题,可以缩短调用时间
    • 但是会将主调函数编译后的代码块变得十分 "臃肿"
    • inline定义的函数,在编译时,会将该函数的函数体直接插入到调用处
    • 就相当于内联函数的函数体在调用出重新写了一遍

 总结:

  • 栈的内存默认为2兆,内存可以修改
  • 站内存储的是非new或molloc出来的变量,没调用一次函数,就会在栈内开辟一段空间,大小为该函数内所有变量的内存和,当内存过大时,栈爆掉就会引发异常
  • 程序是从高内存向低内存进行存储的,两个相邻空间的内存地址相减就能得到
  • 每分配一块空间,这块内存空间就叫做 " 栈帧 "

你可能感兴趣的:(C++,C语言,c++,笔记,开发语言,c语言)