• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

mogers

Memória dos objectos da STL

6 mensagens neste tópico

Boas,

Surgiu-me uma dúvida: um objecto de uma classe da STL (como por exemplo da classe vector) que seja declarado dentro de uma função,

int main()  {
   int i ;
   vector<int> v;
   ...
}

fica armazenado na stack como os int's, ou usa a heap (onde estão as variáveis globais, por exemplo) ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Aparentemente, no meu caso, fica na mesma zona de memória que as variáveis automáticas ... na stack.

/* Eu não sei C++, por isso isto é uma mistura de C com C++ */
#include <cstdio>
#include <cstdlib>
#include <vector>

int g;

int main(void) {
  int i;
  std::vector<int> v;
  int *p;

  p = (int *)malloc(sizeof *p);
  if (p) {
    printf("Address of g: %p\n", &g);
    printf("Address of i: %p\n", &i);
    printf("Address p: %p\n", p);
    printf("Address of v: %p\n", &v);
    free(p);                            /* Edit: memory leak */
  }
  return 0;
}

Address of g: 0x501254
Address of i: 0x7fffce985a80
Address p: 0x502010
Address of v: 0x7fffce985a60

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

fica armazenado na stack como os int's, ou usa a heap (onde estão as variáveis globais, por exemplo) ?

As variáveis globais não estão na Heap. Estão no .data ou .bss conforme o valor de inicialização.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pmg, não tenho a certeza que esse teste seja suficiente. O vector começa com um determinado tamanho e vai alterando o seu tamanho consoante as operações executadas sobre ele. Por causa destas alterações do tamanho, eu acho que deve usar a heap, mas não tenho a certeza.

Baderous, obrigado, tinha aquela ideia.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O objecto vector fica no stack - é uma variável local; o array interno (o tal que vai crescendo conforme a necessidade) é que fica no heap.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora