Pergunta

O novo tipo de funcionalidades (para depuração ou não) você encontra útil, substituindo o novo operador?

Foi útil?

Solução

A principal razão eu tive que new sobrecarga tem sido para o desempenho. Um exemplo está alocando um grande número de pequenos objetos, que é muitas vezes bastante lento, com um alocador de uso geral, mas muitas vezes pode ser melhorado um muito com um alocador personalizado.

Outras dicas

Há muitos casos ao substituir novo operador deve ser feito. Como alguém disse, é principalmente para gerenciamento de memória personalizado.

O principal exemplo que eu, pessoalmente, conversei com foi para sistemas embarcados.

Em um sistema embarcado, alocação dinâmica de memória é geralmente um problema. Mesmo se você tiver um sistema operacional integrado que suporta, você tem todos os tipos de problemas que você pode ter que lidar com (por exemplo, sistemas embarcados, muitas vezes precisam ser mais determinista do que suas contrapartes do PC. Além disso, você pode estar trabalhando em um sistema que é suposto ser-se por anos em um momento, em que a fragmentação de memória caso é um problema real).

Devido a isso, sistemas embarcados tendem a não permitir a alocação de memória dinâmica completamente.

É claro que, na maioria dos projetos de software que você precisa alguns forma de memória dinâmica, e nesses casos você geralmente implementar seu próprio (ou seja, ter algum tipo de pool de memória que todos os segmentos podem pedir memória, etc).

Para fazer projetos C ++ usar esta alocação dinâmica de memória enrolado à mão da maneira mais fácil, eu vi operador de projectos de substituição novo para usar método de alocação do projeto.

Bem, gerenciamento de memória personalizado e depuração. Isso é sobre ele, e tudo o que você pode sair dela também.

Você pode estar desenvolvendo uma biblioteca que exige algum estágio extra na inicialização certos objetos, sobrecarga permite que você faça isso sem algumas chamadas extras desajeitados que o usuário de outra forma acabam por ter de escrever.

Se você está trabalhando com SSE / SIMD, você geralmente precisa de sua memória para ser de 4-word-alinhados, de modo que você pode sobrecarregar new para as classes relevantes para uso memalign() (enquanto o new padrão está fazendo algo equivalente a malloc() plain ).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top