This page was last modified 21:38, 26 October 2007.
Gerência de memória
From Forum Nokia Wiki
Uma das características principais do Symbian OS é que ele foi feito para rodar em dispositivos móveis, onde a quantidade memória e recursos são limitados. Por isso ele conta com uma gerência de recursos muito eficiente. Erros durante a execução de uma aplicação podem ocorrer por exemplo, devido a falta de memória. Estes tipos de erros são conhecidos como exceções (iremos chamá-los de abandonos) e são muito difíceis de saber quando irão ocorrer pois dependem de vários fatores. Porém uma aplicação deve estar pronta para ao se deparar com um abandono voltar a um estado estável do programa.
Boa maneiras para gerênciar recursos de memória são:
- Programe eficientemente assim seu programa não irá utilizar RAM desnecessáriamente.
- Libere recursos sempre que não for mais utilizá-los (lembre-se eles são limitados)
- Quando ocorrer uma falha de memória volte a um estado estável da sua aplicação.
Contents |
Stack e Heap
Na stack:
- Objetos são deletados automáticamente.
- Tamanho padrão é de 8KB.
Na Heap (dinâmicamente)
- Sempre que um objeto for alocado dinâmicamente ele precisa ser removido utilizando delete, se não pode ocorrer uma brecha na memória.
- Tamanho depende do dispositivo, mas, normalmente > 0.5MB (512KB).
Abandonos (Leave)
- Abandonos são utilizados ao invés das exceções em C++.
- Quando ocorre uma falha de recurso o código "abandona".
- O operador new foi sobrecarregado para abandonar caso a memória não seja suficiente.
- Utilize new (ELeave) ao invés do tradicional new.
- A memória é liberada normalmente utilizando delete.
- Funções que podem abandonar deve terminar em "L" , ex.: ConstructL, NewL.
Pilha de limpeza (Cleanup Stack)
Pilha de limpeza - Cleanup Stack
- A não utilização da pilha de limpeza pode deixar brechas na memória.
- Apenas objetos locais vão para a pilha de limpeza.
- Objetos locais quando forem chamar métodos que possam gerar um abandono devem ser colocados na pilha de limpeza. CleanupStack::PushL().
- Caso o objeto falhe seus recursos são liberados, ele é deletado e então removidos da pilha de limpeza.
- Após passar pelo código que pode gerar abandono o objeto deve ser liberado da pilha. CleanupStack::Pop().
- Objetos podem ser liberados da pilha e deletados ao mesmo tempo. CleanupStack::PopAndDestroy();
Construção em duas fases
- Construtores padrão C++ não devem chamar funções que possam abandonar.
- Toda memória dinâmica deve ser criada no construtor da segunda-fase (ConstructL), assim como a chamada a qualquer método que possa abandonar.
| Related Discussions | ||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Nokia Comunicator 9500 | alvisone | General Discussion | 2 | 2004-03-01 07:01 |
| How to serialize an Image object | Pepper_91 | Mobile Java Networking & Messaging & Security | 4 | 2005-12-30 08:40 |
| png and jpg | simonesec | Mobile Java Media (Graphics & Sounds) | 3 | 2005-06-06 08:24 |
| Forum Nokia WRT Webinar Q&A (In Portuguese) | bill.volpe | WRT Widget Development | 0 | 2008-06-13 16:35 |
| setting selected item in a CAknRadioButtonSettingPage | danielos1 | Symbian User Interface | 1 | 2003-10-01 00:52 |
