动态内存管理|学习笔记

简介: 快速学习动态内存管理

开发者学堂课程【你的第一门 C 语言课快速学习动态内存管理】学习笔记,与课程紧密联系,让用户快速学习知识

课程地址:https://developer.aliyun.com/learning/course/444/detail/5486


快速学习动态内存管理


内容介绍:

一、 更灵活的内存管理方式

二、 Moalloc

三、 Free

四、 内存泄漏


一、更灵活的内存管理方式

  • Malloc

——申请动态内存空间

  • Free  

——释放动态内存空间

  • Calloc  

——申请并初始化一系列内存空间

  • Realloc

——重新分配内存空间

二、Malloc

  • 函数原型:

——void *malloc(size_ t size);

  • malloc 函数向系统申请分配 size 个字节的内存空间,并返回一个指向这块空间

的指针。

  • 如果函数调用成功,返回一个指向申请的内存空间的指针,由于返回类型 void

指针(void *),所以它可以被转换成任何类型的数据;如果函数调用失败,返回值是 NULL。另外,如果 size 参数设置为0,返回值也可能是 NULL,但这并不意味着函数调用失败。

  • 举例:

#include

int main( )

{

int *ptr;

ptr = (int * )malloc(sizeof(int));

if (ptr == NULL)

{

printf("分配内存失败! \n");

exit(1) ;

}

printf("请输入一个整数: ");

scanf("%d", ptr);

printf("你输入的整数是: %d\n", *ptr);

return 0;

}

运行:gcc test1.c ss ./a.out

结果:请输入一个整数: 520

你输入的整数是:520


三、free

  • 函数原型:

——void free(void *ptr);

  • free 函数释放 ptr 参数指向的内存空间。该内存空间必须是由 malloc、calloc

或 realloc 函数申请的。

否则,该函数将导致未定义行为。如果 ptr 参数是 NULL,则不执行任何操作。

注意:该函数并不会修改 ptr 参数的值,所以调用后它代然指向原来的地方(变为非法空间)。

  • 例:

#include .h>

#include

int main( )

{

int *ptr;

ptr = (int * )malloc(sizeof(int));

if (ptr == NULL)

{

printf("分配内存失败! \n");

exit(1) ;

}

printf("请输入一个整数: ");

scanf("%d", ptr);

printf("你输入的整数是: %d\n”,*ptr) ;

free(ptr) ;

printf("你输入的整数是: %d\n", *ptr);

return 0;

}

运行:gcc test1.c ss ./a.out

结果:请输入一个整数; 520

你输入的整数是:520

你输入的整数是:0


四、内存泄漏

举例:

#include h>

#include

int main( )

{

while(1)

{

malloc(1024)

}

return o;

}

运行:gcc test1.c ss ./a.out

结果:

Killed

  • 会报错
  • 总结一下,导致内存泄漏主要有两种情况:

——隐式内存泄漏(即用完内存块没有及时使用 free 函数释放)

——丢失内存块地址

相关文章
【深入理解计算机系统】int 不是整数 | float 不是实数 | 内存引用错误的例子 | 学习笔记
【深入理解计算机系统】int 不是整数 | float 不是实数 | 内存引用错误的例子 | 学习笔记
79 0
|
4月前
|
存储 程序员 编译器
c++学习笔记08 内存分区、new和delete的用法
C++内存管理的学习笔记08,介绍了内存分区的概念,包括代码区、全局区、堆区和栈区,以及如何在堆区使用`new`和`delete`进行内存分配和释放。
51 0
|
6月前
|
存储 编译器 C语言
【C++】学习笔记——内存管理
【C++】学习笔记——内存管理
56 15
|
6月前
|
存储 C++
C primer plus 学习笔记 第12章 存储类别、链接和内存管理
C primer plus 学习笔记 第12章 存储类别、链接和内存管理
|
存储 缓存 Linux
计算机操作系统学习笔记(5)——内存管理
计算机操作系统学习笔记(5)——内存管理
115 0
|
NoSQL Redis
Redis学习笔记-内存碎片对性能的影响
Redis学习笔记-内存碎片对性能的影响
105 0
|
存储 缓存 算法
十五、Linux性能优化实战学习笔记 - Linux内存是怎么工作的
内存管理也是操作系统最核心的功能之一。内存主要用来存储系统和应用程序的指令、数据、缓存等
308 1
|
存储 并行计算 测试技术
【CUDA学习笔记】第五篇:内存以及案例解释(附案例代码下载方式)(二)
【CUDA学习笔记】第五篇:内存以及案例解释(附案例代码下载方式)(二)
175 0
【CUDA学习笔记】第五篇:内存以及案例解释(附案例代码下载方式)(二)
|
存储 缓存 NoSQL
二十一、Linux性能优化实战学习笔记- 如何“快准狠”找到系统内存的问题?
已用内存、剩余内存、共享内存、可用内存、缓存和缓冲区的用量。
143 0
|
存储 缓存 Linux
十八、Linux性能优化实战学习笔记- 内存泄漏了,我该如何定位和处理?
当进程通过 malloc() 申请虚拟内存后,系统并不会立即为其分配物理内存,而是在首次访问时,才通过缺页异常陷入内核中分配内存.对应用程序来说,动态内存的分配和回收,是既核心又复杂的一个逻辑功能模块。管理内存的过程中,也很容易发生各种各样的“事故”.
126 0