C 语言中的 Malloc() 与 Calloc() 函数

C语言使我们能够让程序实时分配和管理内存。 为此,有函数 malloc()、calloc()、realloc() 和 free()。 malloc() 和 calloc() 函数分配动态内存。 尽管它们都有相同的目的,但它们具有不同的特性,可以适应每个程序员的需求。

在这个 Linux 在本文中,我们将研究这两个函数并比较它们的语法、调用方法以及它们的工作原理。 这使您可以了解 C 语言可以使用哪些不同的方法来分配动态内存以及哪种方法最适合您的需求。

C语言中Malloc()函数的特点

malloc() 函数实时分配内存。 我们看一下这个函数的原型:

空的 *分配内存尺寸_t 尺寸;

malloc() 函数分配输入参数“size”中指定大小(以字节为单位)的内存空间,并返回一个指向该内存空间的空指针以访问它。

该函数可以分配用于存储 C 中使用的所有数据类型的内存区域。 为此,我们需要声明一个具有要在其中处理的数据类型的指针,并在分配的范围包含的输入参数大小中指定总大小(以字节为单位)。

C语言Calloc()函数的特点

calloc() 函数实时分配内存位置。 我们看一下这个函数的原型:

空的 *卡洛克尺寸_t 内膜, 尺寸_t 尺寸;

calloc() 函数分配一个大小为由输入参数 nmemb 中指定的字节大小的数组组成的内存位置,并返回一个指向分配的内存位置的空指针。 该函数将值 0 分配给构成分配空间的所有数据。

calloc() 函数可以为 C 中使用的所有数据类型分配内存位置。 为此,我们需要声明用于访问内存的指针,以及要在其中管理的数据类型,并根据类型分配总内存空间。

C 语言中的 Malloc() 与 Calloc() 函数

现在我们已经简要概述了这两个功能,让我们看一下它们的功能并进行比较,以便您可以选择最适合您需求的一个。

输出参数: 这两个函数都返回一个 void 类型的指针,因此我们可以为其分配我们想要在分配的内存区域中使用的数据类型。 这使得可以使用 C 中使用的任何数据类型读取和写入两个函数分配的内存。

输入参数: 尽管这两个函数有相似之处,但它们在输入参数中分配和组织数据的方式有所不同。

malloc() 函数仅采用一个输入参数,该参数指定要分配的内存大小(以字节为单位)。 也就是说,如果我们需要分配一个由整数组成的数据范围,例如 example,我们需要将数据类型的大小乘以要分配的内存大小来执行操作。 我们来看看如何使用malloc()函数分配一个大小为16个int类型的数据:

指针 = 分配内存 16 * 大小整数;

正如我们所看到的,当以字节为单位指定要分配的部分的大小时,我们必须执行一个操作来确定每条数据占用的字节数,因为这取决于其类型和程序所在的系统跑步变成。

另一方面,calloc() 函数采用两个输入参数。 第一个是 size 参数,它指定要在存储空间中分配的数据量,而 nmemb 指定每个数据的大小。

此时,calloc()函数似乎是最实用的,因为它直接指定要在“nmemb”参数中分配的数据的大小(以字节为单位)。 然而,在分配内存时,我们必须考虑到某些类型的数据的大小会根据程序运行的系统而变化。 例如int类型数据在32位系统中占用4个字节的大小,而在64位系统中则占用8个字节的大小。

这导致我们必须在两个函数中执行“sizeof”操作来设置某些数据类型的大小。 我们来看看如何使用calloc()函数分配一个大小为16个int类型的数据:

指针 = 卡洛克 16, 大小整数;

正如我们所看到的,我们需要在 malloc() 和 calloc() 函数中执行“sizeof”操作来分配内存空间中的特定数据类型。

文凭

在这个 Linux 在本文中,我们比较了 malloc() 和 calloc() 函数,它们都来自同一集合并具有相同的用途,但具有不同的属性。

在这个比较中我们可以看到它们之间的主要区别在于它们的输入参数以及它们分配要分配的内存区域大小的方式以及它们如何组织字节。

我们还可以看到,虽然 calloc() 函数有一个输入参数,用于指定分配空间的单元大小(以字节为单位),但如果我们要分配的数据类型依赖于它,那么仅此一个方法就不是一个实用的方法。程序运行的。

尽管一个或另一个函数的使用取决于每个程序员的标准和偏好,但 malloc() 函数由于其简单性而最常用于使用动态内存的程序中。