Fórum AllocMem #244979
29/07/2004
0
var p:Pchar; begin p := AllocMem(512); end;
Num outro ponto do programa, eu precisaria saber quanto de memória foi alocada para p.
Existe alguma instrução que me dê essa informação ?
Persist
Curtir tópico
+ 0Posts
29/07/2004
Beppe
TamAloc := (PInteger(Integer(P) - 4)^ and not 3)
Lembre-se de checar por nil.
Como o alocador de memória do Delphi aloca blocos de tamanhos multiplo de 4, vc naum saberá exatamente o quanto foi pedido na alocação. Como alternativa, vc pode usar as rotinas StrAlloc e StrSize.
Gostei + 0
29/07/2004
Persist
Move((p-4)^, TamAloc, 4); :?:
Gostei + 0
30/07/2004
Beppe
Move((p-4)^, TamAloc, 4); TamAloc := TamAloc and not 3;
A MM do Delphi usa os dois bits menos significativos docampo tamanho pra administração do bloco, por isso o bitwise and not.
Gostei + 0
30/07/2004
Persist
Na verdade ele aloca o próximo maior múltiplo de 4 e mais 4.
Por ex:
511 - aloca 512 + 4 = 516.
999 - aloca 1000 + 4 = 1004.
Para mim não serve pq tenho que ler o buffer exato do que foi alocado, então vou alocar mais 4 bytes e colocar no início o tamanho do que virá a seguir.
Muito obrigado !!!
Aproveitando o assunto, vc saberia como o Delphi irá ficar com esses novos chips de 64 bits ?
Creio que o endereçamento irá mudar radicalmente.
Gostei + 0
30/07/2004
Beppe
Como eu disse antes, as rotinas StrAlloc e StrSize fazem isso que vc pretende fazer.
Sobre como vai ficar no Itanium e AMD-64, se o Delphi ficar, não vai ficar logo não.
No Delphi.NET, ele já roda perfeitamente se utilizar só de código gerenciado...o tamanho dos ponteiros é transparente.
Se e quando a Borland produzir uma versão nativa do Delphi para 64 bits, aí tem uma porção de detalhes, detalhes estes que nem tenho total conhecimento ainda. Isso porque um tamanho de palavra de 64 bits, implica num espaço de endereçamento de 64 bits também(sem artifícios).
Talvez para as aplicações legado, a nível de usuário, funcionará ainda endereços de 32 bits, dado que o endereçamento lógico para o usuário permaneça como o(ou seja um superset do) atual. Para novas aplicações haverá um tipo nativo para os novos endereçamentos.
Mas acho que ainda é cedo para se pensar nisso seriamente.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)