+ Responder ao Tópico



  1. #1

    Padrão C++: operador new de posicionamento

    Olá!

    O que seria o operador new de posicionamento?
    Ta... eu sei que a função dele é alocar memória. xD
    Mas qual a utilidade dele? Por que implementar e usar ele ao invés do new comum?

    Pelo que eu vi na internet, cria-se uma classe (normalmente chamada Arena) para gerenciar memória juntamente ao operador new sobrecarregado.
    Mas não compreendi a essência disso tudo.

    Segue o exemplo do livro do Stroustrup modificado:
    Código PHP:
    struct X {
        
    X(int ii) { ii; }
        ~
    X() { /* ... */ }
        
    int i;
    };

    class 
    Arena {
    public:
        
    virtual voidalloc(size_t sz) = 0;
        
    virtual void free(voidp) = 0;
        
    // ...
    };

    voidoperator new(size_t szArenaa) {
        return 
    a->alloc(sz);
    }

    extern ArenaPersistent;
    extern ArenaShared;

    void g(int i) {
        
    X= new(PersistentX(i);
        
    X= new(SharedX(i);
        
    // ...
    }

    void destruct(XpArenaa) {
        
    p->~X();
        
    a->free(p);


  2. #2

    Padrão Re: C++: operador new de posicionamento

    O motivo mais comum para se (re)implementar o operador new ao invéz de utilizar o padrão, é para criar seu próprio gerenciador de memória. O código de exemplo mostra justamente isto.

    O tópico é bastante extenso, e os motivos para se criar um gerenciador de memória variam.
    Mas basicamente, você pode controlar a quantidade de alocações, o tamanho das alocações, diminuir a fragmentação de memória, fazer garbage collection (baseado em reference counting), ter melhor controle da memória compartilhada, etc.

    Se tiver interesse no assunto, recomendo a leitura destes artigos:
    1. Building your own memory manager for C/C++ projects
    2. Inside memory management
    Última edição por jweyrich; 03-08-2010 às 01:42.



  3. #3

    Padrão Re: C++: operador new de posicionamento

    Interessante o primeiro artigo.
    Me deu várias ideias.
    Ele pode ser abaixado em pdf aqui: https://www6.software.ibm.com/develo...anager-pdf.pdf .

    Não consegui ler o segundo ainda, mas pelo que vi ele é mais voltado para C.

    Obrigado.