Duvida sobre alocação de memória

22/03/2006

1

ex. vamos supor que exista uma struct _Data
{
char m_cDia;
char m_cMes;
short m_shAno;
short m_shAnoMin, m_shAnoMax;
};
typedef struct _Data Data;

void Inicia( Data * pdtParam );

/* ************************** */

void Inicia( Data * pdtParam )
{
pdtParam->m_shAnoMIn = 1;
pdtParam->m_shAnoMax = 9999;
}

/* ************************** */
// então qd acontece a chamada:

int main()
{
Data dtHoje;

Inicia(&dtHoje);

return 0;
}

duvida 1: Como foi a alocação de memória neste caso ?

duvida 2: e se a função inicia fosse: Data Inicia(Data dtParam) e fosse usada assim:
Inicia(dtHoje) como seria a alocação de memória neste outro caso ?


Responder

Posts

22/03/2006

Massuda

[quote:5a8f0cf03b=´Fabiano Góes´]Como foi a alocação de memória neste caso ?[/quote:5a8f0cf03b]dtHoje é alocada na pilha do programa; o espaço necessário para essa variável é alocado na pilha pelo código (inserido pelo compilador) que é executado ao iniciar a função main().

[quote:5a8f0cf03b=´Fabiano Góes´]e se a função inicia fosse: Data Inicia(Data dtParam) e fosse usada assim:[/quote:5a8f0cf03b]Também é alocada na pilha do programa, mas essa alocação é feita quando da chamada da função Inicia(); como o parâmetro é passado por valor nesse caso, na chamada da função Inicia() o compilador além de reservar memória na pilha faz uma cópia de dtHoje nessa struct Data recém alocada; alterações feitas em dtParam não se refletem em dtHoje. Isso é uma fonte ´legal´ de bugs difíceis de se achar.


Responder

23/03/2006

Fabiano Góes

massuda:
vc conhece algum livro ou algum material sobre:

alocação de memoria, pilha, etc ?


Responder

23/03/2006

Massuda

[quote:53895e9c6c=´Fabiano Góes´]vc conhece algum livro...[/quote:53895e9c6c]Não.


Responder