kmkg Postado Novembro 14, 2006 Denunciar Share Postado Novembro 14, 2006 Pessoal, quando aloco memória para um Pointer:... private p:Pointer; ... procedure TForm1.Button1Click(Sender: TObject); begin p := AllocMem(65536); end;Em outro ponto do programa gostaria de saber quanto foi alocado para p. Teria algum jeito de saber pelo próprio ponteiro ? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Thales Pontes Martins Postado Novembro 14, 2006 Denunciar Share Postado Novembro 14, 2006 Muito interessante. Sempre quis saber isso mas nunca perguntei porque não tem utilidade nenhuma já que se pode tomar nota de quanto se está alocando pra saber depois. É mais uma curiosidade muito forte de saber como ele faz para saber a quantidade alocada. É certo que ele sabe porque na hora de chamar FreeMem ele tem que saber quanto de momória ele tem que liberar, e no caso de ter que alocar mais ele tem que saber pra não alocar por cima da outra.Bom, as funções GetMem e AllocMem alocam memória na heap, e não na pilha, e chamam SysAllocMem e SysGetMem que são internas do compilador e encapsuladas pelo MemoryManager do sistema. Acredito que o MemoryManager tenha uma pilha para anotar todos os ponteiros com seu respectivos tamanhos, pra poder fazer esse gerenciamento. Mas daí a ter acesso a ela eu já não sei. Vamos esperar os feras. rsrs.Abraço. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 s3c Postado Novembro 15, 2006 Denunciar Share Postado Novembro 15, 2006 A informação fica nos 4 bytes anteriores:var iTam_Aloc:Integer; begin iTam_Aloc := (PInteger(Integer(p)-4)^ and not 3); end;Com a Borlndmm.dll do D6, ele aloca o próximo divisível de 4 + 4 bytes e não sendo inferior a 12 bytes. Os dois bits da direita(bitwise and not 3) são utilizados por ele. Com a Borlndmm.dll do Turbo Delphi, isso mudou; a informação continua lá para alocações ± maiores que 2KB, para as menores não sei como ele faz. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
kmkg
Pessoal, quando aloco memória para um Pointer:
Em outro ponto do programa gostaria de saber quanto foi alocado para p. Teria algum jeito de saber pelo próprio ponteiro ?
Link para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.