簡體   English   中英

calloc()比malloc()&memset()慢

[英]calloc() slower than malloc() & memset()

我想問你一個問題。 我有以下代碼:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#define XXX 1024*1024

int main()
{
        int *p;
        unsigned long x=0;
        while (1)
        {
                //p = (int *) calloc (1,XXX);
                p = (int *) malloc (XXX);
                memset (p,0,XXX);
                x++;
                printf ("%lu MB allocated.\n",x);
                sleep (1);
        }
        return 0;
}

如果我運行此代碼,一切都正常運行。 每秒,在內存中分配一個新的MB。 我遇到的問題是如果我取消注釋calloc()行並注釋malloc()和memset()行。 據我所知,calloc()應該在分配的內存中將所有字節初始化為零; 與malloc()和memset()相同的事情。

當我使用calloc()(沒有malloc()和memset())運行代碼時,分配初始1 MB(正常),然后在幾秒(~10)之后分配另一個MB。

為什么會這樣?

提前致謝!

據我所知,calloc()應該在分配的內存中將所有字節初始化為零。

基於我對calloc調用的理解,這部分是正確的。

它保留空間但不會將所有內存初始化為零。 它通常或通常將一個部分初始化為零,並將所有其他部分指向該部分; 當在此塊中修改或訪問內存時,它將在使用前將其初始化為零。 這意味着非常大的calloc調用不會將所有內存多次設置為零,而是僅在實際需要時才設置。

tl; dr :這是一個OS理論技巧,內核會作弊。 這里有一個更長的描述: https//stackoverflow.com/a/2688522/2441252

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM