W Delphi można uzyskać rozmiar typu wartości za pomocą funkcji magicznej kompilatora sizeof()
, ale wywołanie sizeof()
na typie referencyjnym daje rozmiar wskaźnika, a nie wartości, na którą wskazuje.Jak uzyskać rozmiar pamięci tablicy dynamicznej?
Dla obiektów można uzyskać rozmiar pamięci za pomocą metody InstanceSize
, ale co z dynamicznymi tablicami? Ze względu na wypełnienie, length(MyArray) * sizeof(element)
może nie być dokładne. Czy istnieje jakiś dokładny sposób na uzyskanie rozmiaru pamięci dynamicznej tablicy?
Minęło trochę czasu odkąd wykonałem obliczenia wskaźnikowe w Delphi, ale co z tego: 'PChar (@MyArray [last + 1]) - PChar (@MyArray [0])'? Oczywiście, 'last + 1' może spowodować, że indeks wyjdzie poza granice wyjątku, więc możesz chcieć użyć' last' zamiast tego i obliczyć * prawdziwy * rozmiar (dopełnienie i wszystko) każdego elementu i dodać to do niego. –
Nie jestem pewien, czy w kompilatorze Borland istnieje dopełnienie elementu tablicy. – OnTheFly
[Nie ma dopełnienia] (http://stackoverflow.com/questions/4583985/are-there-any-difference-between-array-and-packed-array-in-delphi). Możesz użyć 'Length (MyArray) * SizeOf (Element)'. –