Join Now
Quality Rating:
  • Currently 0.0 / 5
(0.0 / 5 - 0 votes cast)
Expertise Level:
  • Currently 0.0 / 5
(0.0 / 5 - 0 votes cast)

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

Construtor em 2 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
 
Powered by MediaWiki
     
     RDF Facets:
     
     
     qfnZtypeQUqfnTypeZCommunityContentQ
     qfnZtypeQUqfnTypeZWebpageQ
     qfnZtypeQUqfnTypeZWikiContentQ
     qmarsZlanguageQUxhttpE3aE2fE2fswE2enokiaE2ecomE2flanguageE2d1E2fenX