Array
(
)

Duvida sobre alocação de memória

Fabiano Góes
   - 22 mar 2006

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 ?


Massuda
   - 22 mar 2006


Citação:
Como foi a alocação de memória neste caso ?
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().


Citação:
e se a função inicia fosse: Data Inicia(Data dtParam) e fosse usada assim:
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.


Fabiano Góes
   - 23 mar 2006

massuda:
vc conhece algum livro ou algum material sobre:

alocação de memoria, pilha, etc ?


Massuda
   - 23 mar 2006


Citação:
vc conhece algum livro...
Não.