浅析C/C++程序的内存开辟

作者:小泽同学~
csdn个人主页:小泽同学~
码云:classmate-mzq
motto:己所不欲,勿施于人and勿以善小而不为,勿以恶小而为之
————————————————

前言:不出意外的话,我将在这里记录我的大学编程学习。
因为我也是小白,所以如果大家看到问题的话,可以直接在下面评论或者加我v私我,感谢大家!
个人v:m0106gm(添加的话麻烦备注csdn)
祝我们前程似锦

本人使用的开发环境工具是vs2022

C/C++ 程序内存分配的区域:

  1. 栈区(stack)
    执行函数时,函数内部局部变量的存储单元都可以在栈上创建。函数执行结束后这些存储单元会被自动释放。栈内存分配运算内置于处理器的指令集中,拥有很高的效率,但是分配的内存容量是有限的。栈区主要存放运行函数而分配的局部变量、函数参数、返回数据、返回地址等。

  2. 堆区(heap)
    一般由程序员自主分配释放,若程序员不主动不释放,程序结束时可能由操作系统回收。其分配方式类似于链表。

  3. 数据段(data segment)
    静态存储区,存放全局变量和静态数据,程序结束后由系统释放。

  4. 代码段(code segment)
    存放函数体(类成员函数和全局函数)的二进制代码。


内存区域划分图:
浅析C/C++程序的内存开辟_第1张图片

有了这幅图,可以更好的理解static 关键字修饰局部变量的情况:

实际上,普通的局部变量是在栈区分配空间的,在栈区上创建的变量,出了作用域就会销毁。
但是,如果一个变量被 static 修饰,就会存放到数据段(静态区),而在数据段上创建的变量,直到程序结束才会销毁,所以生命周期因此而变长。

栈区的特点:在上面创建的变量出了作用域就销毁。

数据段的特点:在上面创建的变量直到程序结束才销毁

写在最后

非常感谢你耐着性子把它读完

如果觉得我写的还不错,希望能点个赞或评论一下为我加油,感谢✌

愿我们一起努力奔跑,向美好的未来不断前进,愿我们从懵懵懂懂的一枚菜鸟逐渐成为大佬。加油,为自己点赞!

你可能感兴趣的:(c语言,c语言,c++)