Перечисляемый тип и размер массива

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Перечисляемый тип и размер массива

Сообщение VirtUX » 21.08.2009 12:56:56

Каким образом можно установить размер массива 64-битным значением и как потом его обходить в цикле for to(downto) do?
Для примера:
Код: Выделить всё
var i: QWord;
begin
  for i := 0 to high(QWord) do ; //выдаст ошибку, что i - неперечисляемый тип
end;
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Перечисляемый тип и размер массива

Сообщение Дож » 21.08.2009 13:29:21

Код: Выделить всё
var
  I: QWord;
begin
  I := 0;
  while True do begin
    // ...
    if I = High(QWord) then
      Break;
    I := I + 1;
  end;
end.
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47

Re: Перечисляемый тип и размер массива

Сообщение v-t-l » 21.08.2009 16:43:45

for i := lo(QWord) to hi(QWord) do
v-t-l
энтузиаст
 
Сообщения: 740
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: Перечисляемый тип и размер массива

Сообщение Дож » 21.08.2009 17:02:47

v-t-l, а вы пробовали это скомпилировать?
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47

Re: Перечисляемый тип и размер массива

Сообщение VirtUX » 21.08.2009 17:43:33

Дож писал(а):
Код: Выделить всё
var
  I: QWord;
begin
  I := 0;
  while True do begin
    // ...
    if I = High(QWord) then
      Break;
    I := I + 1;
  end;
end.

Этот вариант подходит. А как быть с SetLength(M, high(QWord)); ?
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Перечисляемый тип и размер массива

Сообщение Max Rusov » 21.08.2009 17:48:27

Что у Вас за массив, в котором может быть более 4 миллиардов элементов? :shock:
На 32-х разрядной системе Вы даже теоретически не можете с таким массивом работать.
(а на x64 QWord будет нормально итерировать)
Max Rusov
постоялец
 
Сообщения: 191
Зарегистрирован: 25.04.2009 15:46:03

Re: Перечисляемый тип и размер массива

Сообщение VirtUX » 21.08.2009 17:54:03

Max Rusov писал(а):Что у Вас за массив, в котором может быть более 4 миллиардов элементов? :shock:
На 32-х разрядной системе Вы даже теоретически не можете с таким массивом работать.
(а на x64 QWord будет нормально итерировать)

Значит 64-х битный размер массива возможен только на 64-х битных ОС? Интересно, а есть-ли возможность эмулировать на 32-х битной работу 64-х битной?
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Перечисляемый тип и размер массива

Сообщение Дож » 21.08.2009 17:57:19

VirtUX
Вы посчитайте сколько такой массив будет занимать места в оперативке.
И можно ли будет получать к нему доступ при помощи 32-битного указателя.
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47

Re: Перечисляемый тип и размер массива

Сообщение Max Rusov » 21.08.2009 18:19:57

Все адресное пространство 32-х разрядного приложения ограничено 4-мя Г в лучшем случае (а обычно, вообще 2-мя).
Так как для массивов требуется _непрерывное_ адресное пространство, реально допустимый размер _намного_ меньше.
Скорее всего даже блок памяти в 1 Г аллоцировать не удасться. Приходится использовать структуры со страничной
аллокацией (Paged List'ы). Если же нужны структуры данных > 4х Г - то это только файлы с подкачкой по частям
(или страничным мэппиногом)
Max Rusov
постоялец
 
Сообщения: 191
Зарегистрирован: 25.04.2009 15:46:03


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11

Рейтинг@Mail.ru