亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> C语言

malloc() 与 calloc():用示例解释的关键差异

在学习 malloc 和 calloc 的区别之前,我们先学习一下-

什么是动态内存分配?

动态内存分配是在运行时分配内存的过程。有四个库例程,calloc()、free()、realloc() 和 malloc(),可用于在程序执行期间分配内存和释放内存。这些例程在名为 stdlib.h 的头文件中定义。

什么是 malloc() ?

它是一个用于动态分配内存块的函数。它保留指定大小的内存空间,并返回指向该内存位置的空指针。

返回的指针通常是 void 类型。这意味着我们可以将 malloc 函数分配给任何指针。 malloc 的完整形式是内存分配。

在本教程中,您将学习:

什么是 calloc() ?

Calloc() 函数用于分配多个内存块。它是一种动态内存分配功能,用于将内存分配给复杂的数据结构,例如数组和结构。如果此函数未能按指定分配足够的空间,则返回空指针。 calloc函数的完整形式是连续分配。

为什么要使用 malloc() ?

以下是使用malloc()的原因

为什么要使用 calloc() ?

下面是使用 calloc() 的原因

malloc() 的语法

这是 malloc() 的语法

ptr = (cast_type *) malloc (byte_size);

在上述语法中,ptr 是 cast_type 的指针。 malloc 函数返回一个指向 byte_size 已分配内存的指针。

Example: ptr = (int *) malloc (50)

这条语句执行成功后,会预留50字节的内存空间。保留空间的第一个字节的地址分配给int类型的指针“ptr”。

calloc() 的语法

这是 malloc() 的语法

ptr = (cast_type *) calloc (n, size);

上述语法用于分配 n 个相同大小的内存块。分配内存空间后,所有字节都初始化为零。返回当前位于已分配内存空间第一个字节的指针。

C 中的 malloc() 示例

在下面的代码中,sizeof(*ptr) 用于分配 15 个整数的内存块。在 printf 语句中,我们找到了第 6 个整数的值。

#include<stdlib.h>
#include<stdio.h>
int main(){
int *ptr;
ptr = malloc(15 * sizeof(*ptr)); 
    if (ptr != NULL) {
      *(ptr + 5) = 480; 
      printf("Value of the 6th integer is %d",*(ptr + 5));
    }
}

输出:

第6个整数的值为480

C 中的 calloc() 示例

下面的 C 语言程序计算前十项的总和。如果指针值为null,则不分配内存空间。

For循环用于迭代变量“i”的值并打印总和。最后,free函数用于释放指针。

#include <stdio.h>
#include <stdlib.h>
    int main() {
        int i, * ptr, sum = 0;
        ptr = calloc(10, sizeof(int));
        if (ptr == NULL) {
            printf("Error! memory not allocated.");
            exit(0);
        }
        printf("Building and calculating the sequence sum of the first 10 terms \n");
        for (i = 0; i < 10; ++i) { * (ptr + i) = i;
            sum += * (ptr + i);
        }
        printf("Sum = %d", sum);
        free(ptr);
        return 0;
    }

输出:

构建和计算前 10 项的序列和 n Sum =45

calloc() 和 malloc() 的区别

以下是 malloc() 和 calloc() 之间的重要区别:

malloc() calloc() malloc() 函数将创建一个由用户指定大小的内存块。Calloc() 函数可以为一个变量分配多个内存块。Malloc 函数包含垃圾值。由 calloc 函数分配的内存块总是初始化为零。参数数量为1。参数数量为2。Calloc比malloc慢。Malloc比calloc快。与calloc相比不安全。与malloc相比使用安全。时间效率高于calloc ().时间效率低于malloc()。malloc()函数只返回起始地址,不归零。分配地址前,Calloc()函数返回起始地址,归零。不进行初始化内存。它执行内存初始化。

主要区别:


C语言

  1. 交流电路的一些例子
  2. C# 表达式、语句和块(附示例)
  3. C++ do...while 循环与示例
  4. 带有示例的 C++ 指针
  5. C++ Char 数据类型及示例
  6. 带有示例的 C++ 运算符重载
  7. 带有程序示例的 C++ 函数
  8. C# 集合教程与示例
  9. while 和 do-while 之间的区别:用例子解释
  10. 带有程序示例的 C 库中的 calloc() 函数
  11. 带有示例的 Python 字符串计数()
  12. 带有示例的 Python round() 函数