Comportamento anormal da função malloc ()?

1

Eu estava brincando com funções de alocação no meu Ubuntu 14.04 64-bit, gcc versão 4.8.2 (Ubuntu 4.8.2-19ubuntu1) e descobri que malloc retorna a memória com a inicialização para zero. O que é bastante estranho, pois não deve inicializar e o bloco de memória retornado deve ser não inicializado.

O código é o seguinte:

#include<stdio.h>
#include<stdlib.h> 
int main()
{
    int *i=(int*)malloc(4);
    printf("The Address of pointer is %p and Value is %d\n",i,*i);
    return 0;
}

A saída é:

The Address of pointer is 0x843070 and Value is 0  

Eu também tentei atribuir grandes pedaços de memória com o mesmo resultado. Alguém pode sugerir porque isso está acontecendo?

    
por SKY 13.04.2015 / 21:45

1 resposta

2

malloc() aloca memória do heap, que ele gerencia. É muito bom que possa retornar um pedaço de heap que foi usado anteriormente e, em seguida, free()ed , e assim ele conterá os dados que já existiam antes. Quando não há heap ainda, ou nenhum livre, ele precisa obter mais ram do kernel para aumentar o heap. Quando o kernel fornece um novo processo mais ram, ele zera tudo primeiro, para que um processo não seja capaz de capturar e examinar dados liberados por outro processo, que pode conter informações confidenciais. Assim, o que você provavelmente está vendo é a primeira vez que você usa malloc() de qualquer memória, ela vem diretamente do kernel e é, portanto, zeroeod, em vez de ser reusada no processo, o que não seria zerado.

    
por psusi 14.04.2015 / 01:08