Таблицы / указатели при использовании IMAGE_FILE_LARGE_ADDRESS_AWARE 32 - 64 бит - PullRequest
0 голосов
/ 21 октября 2010

Позвольте мне задать очень конкретный вопрос: Какая разница (в использовании памяти), когда у вас большой массив, или большой список того же размера (реализован с помощью указателей). * 1001 например *

var a:array[1..1000000] of integer;

и

type
  po=^p1;
  p1=record
     v:integer; 
     next:po;
  end;
var p:po;

и вы создаете список с 1000000 целыми числами.

  1. Будет ли реализация указателя использовать намного больше памяти, чем массив?
  2. Будет ли разница еще больше на 64-битных компьютерах, так как указатели 64-битные.

Ответы [ 2 ]

0 голосов
/ 21 октября 2010

Запись имеет размер 8 байт (на 32-битной Delphi), массив - 4 байта (* длина).

Предполагая, что размер указателя равен 8 байтам в предстоящем 64-битном Delphi, запись будет 12 байт (если целое число останется 4, что я предполагаю).

PS: я думаю, что было бы лучше объявить большой массив динамическим, поскольку память динамического массива выделяется в куче, а не в стеке.

0 голосов
/ 21 октября 2010

x86 bpointers - 4 байта (32 бита). Указатели x64 имеют размер 8 байт (64 бита).

  1. Да, размером указателя на запись (т. Е. В 1 миллион раз больше размера указателя) плюс размер одного начального указателя на список.
  2. Да, по крайней мере 4 байта на запись и 4 байта на исходную запись.

При 2. это минимальное увеличение размера. Фактическое увеличение размера может быть больше и зависит от того, как Embarcadero будет выполнять упаковку записей и выравнивание полей в мире x64.

- Йерун

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...