[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico]
[Índice de assunto]
Re: Pilha
- Subject: Re: Pilha
- From: Nelson Posse Lago <lago@that.com.br>
- Date: Mon, 25 Mar 2002 03:33:04 -0300
On Sun, Mar 24 2002 at 11:36:51pm -0300, Ivan Neto wrote:
> Mas e se um dos argumentos da função chamada for um array? Como a função
> chamadora coloca esse array na pilha?
Em C, um array consiste, na verdade, em um apontador para o endereco
"base" de um buffer de tamanho conhecido. Entao, em 99.999...% dos casos,
voce nao passa um array para uma funcao, voce passa apenas o apontador
para a base do array. Ou seja, voce passa o apontador por valor (voce cria
uma copia do valor do apontador e passa essa copia), mas o array mesmo (ou
seja, os dados) voce passa por referencia (ou seja, nao copia pra lugar
nenhum; a funcao chamada "pega" o endereco que foi passado por valor e o
usa para acessar diretamente os dados do array). Isso e' otimo, pois
significa que voce nao precisa fazer um monte de operacoes de copias de
elementos pra la' e pra ca' (e' muito mais rapido).
Em linguagem C, acho que nem e' possivel passar um array por valor (nao
consigo imaginar um jeito razoavel de forcar os dados a serem empilhados).
Em C++, talvez seja possivel passar um <vector> por valor (mas nao tenho
certeza). Em linguagem de montagem, seria possivel, mas bem estupido
(teria que fazer um "loop" para empilhar todos os dados e depois chamar a
funcao).
No caso do EP, a funcao que voces precisam escrever em linguagem de
montagem recebe como parametro, justamente, os apontadores para os dois
"arrays" de dados. Com esses apontadores, a funcao pode acessar todos os
elementos do array, independentemente de eles terem sido alocados na pilha
("short x[100]") ou no "heap" ("short *x; x = malloc(...)").
Ate' +
Nelson
- References:
- Pilha
- From: Ivan Neto <ivanneto@linux.ime.usp.br>