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) { i = ii; }
    ~X() { /* ... */ }
    int i;
};
class Arena {
public:
    virtual void* alloc(size_t sz) = 0;
    virtual void free(void* p) = 0;
    // ...
};
void* operator new(size_t sz, Arena* a) {
    return a->alloc(sz);
}
extern Arena* Persistent;
extern Arena* Shared;
void g(int i) {
    X* p = new(Persistent) X(i);
    X* q = new(Shared) X(i);
    // ...
}
void destruct(X* p, Arena* a) {
    p->~X();
    a->free(p);
} 
 
	 
	
	
	
		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
	 
	
	
	
		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.