Diferenças Entre Estruturas

Delphi

09/09/2005

Gostaria de Saber qual a diferença entre a estrutura RECORD e PACKAGE RECORD...


Tiago Malveira

Tiago Malveira

Curtidas 0

Respostas

Ipc$

Ipc$

09/09/2005

Não seria [b:d5655ca7f7]packed[/b:d5655ca7f7] record ?


GOSTEI 0
Tiago Malveira

Tiago Malveira

09/09/2005

[quote:b3bdb0017f=´ipc$´]Não seria [b:b3bdb0017f]packed[/b:b3bdb0017f] record ?[/quote:b3bdb0017f]
É isso mesmo...


GOSTEI 0
Rjun

Rjun

09/09/2005

Tiago

Veja se esses links te ajudam.

http://www.activedelphi.com.br//modules.php?op=modload&name=XForum&file=viewthread&fid=4&tid=2048&orderdate=DESC

http://forum.clubedelphi.net/viewtopic.php?t=62617


GOSTEI 0
Massuda

Massuda

09/09/2005

O [b:310c3a7af0]packed[/b:310c3a7af0] tem relação sobre como o compilador irá dispor os elementos de um [b:310c3a7af0]record[/b:310c3a7af0] na memória.

Quando o packed não é usado, o compilador dispõe os elementos do record na memória de modo que o endereçamento desses elementos por parte do processador seja mais eficiente. Num processador 32 bits é mais eficiente ter os dados em endereços que sejam múltiplo de 4. Assim, um record...
type
  TExemplo = record
    C: Byte;
    W: Word
    L: Longword;
  end;
...ocuparia um espaço mais ou menos assim na memória...
  | C | - | - | - |
  | W | W | - | - |
  | L | L | L | L |
...ou seja, ocuparia ao todo 12 bytes.

Quando packed é usado, você está pedindo explicitamente ao compilador para não tentar otimizar o acesso aos elementos do record, o que faz com que o compilador disponha os elementos do record na memória sem inserir bytes adicionais para obter um endereçamento mais eficiente; o record TExemplo ficaria assim...
  | C |
  | W | W |
  | L | L | L | L |
...e ocuparia ao todo 7 bytes de memória.

Normalmente usa-se packed nos records que representam estruturas de dados que são armazenadas em disco ou em estruturas de dados usadas em comunicação de dados.

Geralmente não há necessidade de usar packed para estruturas de dados que são usadas apenas em tempo de execução.


GOSTEI 0
Ipc$

Ipc$

09/09/2005

Outro caso de packed record é quando vc tem que alimentar uma estrutura através de ponteiros por não saber que tipos e quantidade de campos ela possui.


GOSTEI 0
POSTAR