Почему malloc инициализирует значения 0 в gcc?

Возможно, это отличается от платформы к платформе, но

когда я компилирую с помощью gcc и запускаю код ниже, Я получаю 0 каждый раз в моем ubuntu 11.10.

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

int main()
{
    double *a = (double*) malloc(sizeof(double)*100)
    printf("%f", *a);
}

Почему malloc ведет себя так, даже если есть calloc?

Разве это не означает, что есть нежелательные накладные расходы производительности просто для инициализации значений 0, даже если вы не хотите, чтобы это было иногда?


РЕДАКТИРОВАТЬ: О, мой предыдущий пример не был инициализирующим, но случайно использовал "свежий" блок.

Я точно искал, почему он инициализирует его, когда выделяет большой блок:

int main()
{
    int *a = (int*) malloc(sizeof(int)*200000);
    a[10] = 3;
    printf("%d", *(a+10));

    free(a);

    a = (double*) malloc(sizeof(double)*200000);
    printf("%d", *(a+10));
}

OUTPUT: 3
        0 (initialized)

Но спасибо, что указали, что при сбое есть причина БЕЗОПАСНОСТИ! (Никогда не задумывался об этом). Конечно, он должен инициализироваться нулем при выделении нового блока или большого блока.

76
задан Jeegar Patel 30 December 2011 в 08:15
поделиться