美文网首页
C 内存管理

C 内存管理

作者: Rokkia | 来源:发表于2017-09-01 15:54 被阅读18次

C里比较重要的东西, 一个是指针,另外一个应该就是内存了。

四种方法
1.malloc
2.calloc
3.realloc
4.free

void *malloc(size_t size)

分配空间
特点
1.在堆区分配一块空间 。
2.分配空间的内容没有被初始化,也就是说有可能有的位置不是\0 。
3.返回值为void * 也就是任意类型 可以使用 char*等进行转换 。
4.如果size为0 则返回NULL。

void *calloc(size_t nmemb, size_t size)

分配空间
特点
1.在内存中分配一块空间。
2.分配空间的内容会被初始化为\0
3.把内存块分配给定大小的数组,即连续的。
4.如果size为0 则返回NULL。

void *realloc(void *ptr, size_t size)

重新分配空间
特点
1.新开辟的内存后,会把老内存的数据复制到新内存中,同时老内存内的数据会被回收。(于是这就导致了很多不确定性。 如果新的比旧的大,就会复制完后,空余部分自动填充。如果新的比旧的小,就会只copy旧的前一部分)。
2.如果ptr为NULL ,则realloc的作用跟malloc的作用一下。
3.如果指定的size为0 ,则相当于调用了free(ptr)。

void *free(void *ptr)

释放内存
特点
1.释放指针ptr所指向的内存块,如果ptr为NULL,相当于什么也没做
2.对ptr使用free()后,要及时对ptr赋值为NULL,避免野指针的出现或误操作。

参考文章:
[C/C++]内存分配与释放(malloc、calloc、realloc、free)
C 内存管理

相关文章

  • c++内存管理

    c++内存管理长文 c++内存管理

  • 内存管理

    内容包括: C++内存管理 Java内存管理 C++内存管理 内存分配方式 在C++中,内存分成5个区,分别是栈、...

  • Java GC

    概述 GC => 垃圾回收 = 回收可用空间 + 压缩内存 内存管理 手动内存管理 => C | C++ 自动内存...

  • Redis源码:内存管理与事件处理

    Redis内存管理 Redis内存管理相关文件为zmalloc.c/zmalloc.h,其只是对C中内存管理函数做...

  • iOS的内存管理

    Objective-C需要自己考虑内存管理,但是如果熟悉Objective-C的内存管理机制,手工管理内存其实也并...

  • Objective-C 内存管理基础

    前言 之前的两篇拙文C语言-内存管理基础、C语言-内存管理深入 介绍了关于C语言在内存管理方面的相关知识。但是对于...

  • 学了指针没学动态内存一切都白搭!C语言基础教程之内存管理

    C语言内存管理 本文将讲解 C 中的动态内存管理。C 语言为内存的分配和管理提供了几个函数。这些函数可以在头文件中...

  • C++之内存布局

    在C++之内存管理一文中,我们已经了解到C++的内存管理,这里介绍C++的典型内存布局结构。 1、总体来说,C/C...

  • Swift中的内存管理

    1、内存管理,weak和unowned2、@autoreleasepool3、C 指针内存管理 1、内存管理,we...

  • 第二章 Java内存区域和内存溢出异常

    概述 java内存管理相比于C和C++自己管理内存方便了很多,不用自己手动去管理和释放内存,不必为每一个对象...

网友评论

      本文标题:C 内存管理

      本文链接:https://www.haomeiwen.com/subject/enzhjxtx.html