C语言笔记——动态内存分配1

139 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 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 头文件中)