In Delphi, è possibile ottenere le dimensioni di un tipo di valore con la funzione magica del compilatore sizeof()
, ma chiamando sizeof()
su un tipo di riferimento si otterrà la dimensione di un puntatore, non del valore a cui punta.Come ottenere le dimensioni della memoria di un array dinamico?
Per gli oggetti, è possibile ottenere le dimensioni della memoria con il metodo InstanceSize
, ma per quanto riguarda gli array dinamici? A causa del riempimento, length(MyArray) * sizeof(element)
potrebbe non essere preciso. Quindi, esiste un modo preciso per ottenere le dimensioni della memoria di un array dinamico?
È passato un po 'di tempo da quando ho eseguito i calcoli del puntatore in Delphi, ma che dire di questo: 'PChar (@MyArray [last + 1]) - PChar (@MyArray [0])'? Naturalmente, 'last + 1' potrebbe causare un'eccezione di indice fuori dai limiti, quindi potresti voler usare' last' invece e calcolare la dimensione * real * (padding e tutti) di ogni elemento e aggiungerla ad essa. –
Non sono sicuro se ci sia un riempimento di elementi dell'array nel mondo dei compilatori di Borland. – OnTheFly
[Non c'è padding] (http://stackoverflow.com/questions/4583985/are-there-any-difference-between-array-and-packed-array-in-delphi). Puoi usare 'Length (MyArray) * SizeOf (Element)'. –