7

質問をさせていただきたいと思います。次のコードがあります。

#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 が割り当てられます。

この動作はなぜですか?

前もって感謝します!

4

1 に答える 1