Alocação de memoria para vetores

3 views
Skip to first unread message

Felipe Faria

unread,
Oct 25, 2010, 7:14:55 PM10/25/10
to comp...@googlegroups.com
To olhando aqui o slide 13 e 14, e eu não vejo o programa alocar memoria pros vetores na hora que declara o vetor parece que sai usando tudo a partir do valor em %edx direto.
E quando eu faço um programa aqui ele faz usando o esp mesmo (Que parece mais facil e tal).
E no slide 14 tambem parece que pula essa parte, as funções já recebem as estruturas prontas.
Como funciona isso?

Fernando Silva

unread,
Oct 25, 2010, 7:23:08 PM10/25/10
to comp...@googlegroups.com
Esses slides que você está referenciando, são de qual aula? se não fica complicado eu entender sua dúvida...

Stefan Teixeira

unread,
Oct 25, 2010, 7:24:06 PM10/25/10
to comp...@googlegroups.com
Aula 13.

Felipe Faria

unread,
Oct 25, 2010, 7:26:43 PM10/25/10
to comp...@googlegroups.com
Ih foi mal, eu troquei slides com aula, São os conjuntos de slides das aulas 13 e 14.

Fernando Silva

unread,
Oct 25, 2010, 7:34:49 PM10/25/10
to comp...@googlegroups.com
Bem, pelo que andei vendo, em todos os casos em que vetores são usados na aula 13, em momento algum há um exemplo em que os vetores são instanciados, o que acontece é que todos os exemplos simplesmente manipulam vetores que já estão na memória. Se for necessário instanciar um vetor, ai sim, deve se reservar a quantidade de memória correta para que caiba ele todo.

O caso da aula 14 é similar, os exemplos apenas recebem as estruturas como parâmetro, logo elas já estão na memória, bastam ser acessadas. Mas como uma estrutura se comporta de forma similar a um vetor em C, o que foi dito acima também é válido.

OBS: Lembrando que as estruturas são passadas como ponteiros quando são argumentos de uma função, um tratamento igual se dão com vetores, aonde passamos o endereço da primeira posição e o tamanho do vetor, quando fazemos uma função.

Felipe Faria

unread,
Oct 25, 2010, 7:37:25 PM10/25/10
to comp...@googlegroups.com
Minha duvida era essa como instancia. Mas não deve precisar saber então né?

Felipe Pedrosa Martinez

unread,
Oct 25, 2010, 7:42:03 PM10/25/10
to comp...@googlegroups.com
Não sei se eu entendi a sua dúvida cara.

Se você entende que o vetor é como um ponteiro, ou seja, o ponteiro apontando pro começo da estrutura + numero de elementos * tamanho de cada elemento vai te dar a posição de memória que você quer. Para instanciá-la basta mover um valor qualquer para aquela posição.

Para instanciar o vetor todo, basta fazer isso para cada posição dele, lembrando de multiplicar o quanto cada elemento ocupa na memória para cada incremento de índice.

2010/10/25 Felipe Faria <felipe...@gmail.com>



--
[]'s

Felipe Martinez

Fernando Silva

unread,
Oct 25, 2010, 8:26:21 PM10/25/10
to comp...@googlegroups.com
Bem, vou tentar te dar um exemplo, se você tiver a seguinte situação:

int v[10];

O que acontece é que será alocado um vetor de inteiros, com 10 posições, logo, precisamos de 10 * 4 bytes = 40 bytes de memória. Como no caso, não me lembro da professora recorer a salvar dados na memória principal, vamos tentar salvar na pilha.

O que seria feito é, reservar 40 bytes na pilha, e usar o topo desse espaço reservado(a posição para aonde ESP aponta após o SUB $40, %ESP) e usar ele como base do seu vetor, dai em diante, basta colocar os valores que você precisar nas posições.

Espero que tenha ficado mais claro.
Reply all
Reply to author
Forward
0 new messages