中文字幕一区二区人妻电影,亚洲av无码一区二区乱子伦as ,亚洲精品无码永久在线观看,亚洲成aⅴ人片久青草影院按摩,亚洲黑人巨大videos

malloc()與calloc():用示例說明關(guān)鍵區(qū)別

發(fā)布于:2021-02-09 09:40:20

0

446

0

malloc() calloc() 區(qū)別 示例

在學(xué)習(xí)malloc和calloc之間的區(qū)別之前,讓我們先學(xué)習(xí):

什么是動態(tài)內(nèi)存分配?

動態(tài)內(nèi)存分配是在運行時分配內(nèi)存的過程。有四個庫例程,calloc()、free()、realloc()和malloc(),它們可以用來分配內(nèi)存并在程序執(zhí)行期間釋放內(nèi)存。這些例程在名為stdlib.h的頭文件中定義。

什么是malloc()?

它是一個用于動態(tài)分配內(nèi)存塊的函數(shù)。它保留指定大小的內(nèi)存空間,并返回指向內(nèi)存位置的空指針。

返回的指針通常是void類型。這意味著我們可以將malloc函數(shù)分配給任何指針。malloc的完整形式是內(nèi)存分配。

什么是calloc()?

Calloc()函數(shù)用于分配多個內(nèi)存塊。它是一種動態(tài)內(nèi)存分配函數(shù),用于將內(nèi)存分配給數(shù)組和結(jié)構(gòu)等復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。如果此函數(shù)未能按指定分配足夠的空間,它將返回null指針。calloc函數(shù)的完整形式是連續(xù)分配。

為什么要使用malloc()?

下面是使用malloc()的原因:

  • 當(dāng)您必須在運行時分配內(nèi)存時,應(yīng)使用malloc()。

  • 當(dāng)您必須分配在當(dāng)前內(nèi)存塊執(zhí)行之后必須存在的對象時,應(yīng)使用malloc。

  • 如果您需要分配的內(nèi)存大于該堆棧的大小,請使用malloc()。

  • 它將指針返回到分配空間的第一個字節(jié)。

  • 它使開發(fā)人員可以按需要分配確切數(shù)量的內(nèi)存。

  • 該函數(shù)從堆中分配字節(jié)的內(nèi)存塊大小。

為什么要使用calloc()?

下面是使用calloc()的原因:

  • 當(dāng)您必須將分配的內(nèi)存設(shè)置為零時。

  • 您可以使用calloc返回一個指針來訪問內(nèi)存堆。

  • 需要將元素初始化為零以返回指向內(nèi)存的指針時使用。

  • 為了防止malloc()可能發(fā)生的溢出

  • 使用calloc()請求已知已歸零的頁面。

malloc()的語法

下面是malloc()的語法

ptr = (cast_type *) malloc (byte_size);

在上述語法中,ptr是cast類型的指針。malloc函數(shù)返回一個指向字節(jié)大小的分配內(nèi)存的指針。

ptr = (int *) malloc (50)

當(dāng)此語句成功執(zhí)行時,將保留50字節(jié)的內(nèi)存空間。保留空間的第一個字節(jié)的地址分配給int類型的指針“ptr”。

calloc()的語法

下面是malloc()的語法

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

上面的語法用于分配相同大小的n個內(nèi)存塊。分配內(nèi)存空間后,所有字節(jié)都初始化為零。返回當(dāng)前位于分配內(nèi)存空間的第一個字節(jié)的指針。

C中的malloc()示例

在下面的代碼中,sizeof(*ptr)用于分配一個包含15個整數(shù)的內(nèi)存塊。在printf語句中,我們找到了第6個整數(shù)的值。

#include#includeint 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個整數(shù)的值是480。

C中的calloc()示例

下面的C語言程序計算前十項的總和。如果指針值為null,則不會分配內(nèi)存空間。

For循環(huán)用于迭代變量“i”的值并打印總和。最后,函數(shù)free用于釋放指針。

#include#includeint 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()之間的區(qū)別

 

以下是malloc()和calloc()之間的重要區(qū)別:

{xunruicms_img_title}

關(guān)鍵區(qū)別: 

  • malloc()函數(shù)只返回起始地址,不將其置零另一方面,calloc()函數(shù)返回起始地址并將其置零。

  • 在malloc函數(shù)中,參數(shù)數(shù)為2,而在calloc函數(shù)中,參數(shù)數(shù)為1。

  • malloc()時間效率高于calloc(),而malloc()與calloc()相比不安全。

  • malloc不初始化內(nèi)存,而calloc執(zhí)行內(nèi)存初始化。