一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第9天,点击查看活动详情。
首先介绍一下C/C++程序内存分配的几个区域:
1.栈区(stack ):在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。栈区主要存放运行函数而分配的局部变量、函数参数、返回数据、返回地址等。
2.堆区( heap ):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。分配方式类似于链表。
3.数据段(静态区) ( static )存放全局变量、静态数据。程序结束后由系统释放。
4.代码段:存放函数体(类成员函数和全局函数)的二进制代码。
\
关于static关键字修饰局部变量的例子:
实际上普通的局部变量是在栈区分配空间的,栈区的特点是在上面创建的变量出了作用域就销毁。
但是被static修饰的变量存放在数据段(静态区) ,数据段的特点是在 上面创建的变量,直到程序结束才销毁所以生命周期变长。(下面会讲到例子)
\
当前我们知道的内存的使用方式:
1.创建一个变量
int a =10; //局部变量 - 栈区 在栈空间上开辟四个字节
int g_a = 10; //全局变量 - 静态区
char arr [10] = { 0 };//在栈空间上开辟10个字节得到连续空间 但以上开辟空间的方式有两个特点:
1.空间开辟大小是固定的
2.数组在声明的时候,必须指定数组的长度,它所需要的内存在编译时分配
动态内存函数的介绍
malloc 和 free(它们的声明在 stdlib.h 头文件中)