2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Delphi EX3 64-bit
Сообщение23.12.2013, 20:50 
Аватара пользователя
Здравствуйте!
Не могу пока понять, почему в Delphi EX3 64-bit при выбранной платформе Win64 на 64-битной Windows7 при компиляции проекта выдаётся ошибка о превышении 2Гб для типа: задаю массиив 20000 на 20000.
Спасибо.

 
 
 
 Re: Delphi EX3 64-bit
Сообщение23.12.2013, 21:03 
Fgolm в сообщении #805272 писал(а):
Здравствуйте!
Не могу пока понять, почему в Delphi EX3 64-bit при выбранной платформе Win64 на 64-битной Windows7 при компиляции проекта выдаётся ошибка о превышении 2Гб для типа: задаю массиив 20000 на 20000.
Спасибо.
1. Если массив double, то он будет > 3ГБ.
2. Компилятор Delphi, даже 64-bit, может иметь ограничения на размар типа данных.

 
 
 
 Re: Delphi EX3 64-bit
Сообщение23.12.2013, 21:12 
Аватара пользователя
Даже double выдаёт ту же ошибку. Я проверял на lazarus-64 там такой проблем не вознило, задавал массивы и >30000

 
 
 
 Re: Delphi EX3 64-bit
Сообщение24.12.2013, 01:02 
Fgolm в сообщении #805276 писал(а):
Даже double выдаёт ту же ошибку. Я проверял на lazarus-64 там такой проблем не вознило, задавал массивы и >30000
Фразу про "Даже double..." я не понял.
Ваш массив содержит $20000 \cdot 20000 = 4 \cdot 10^8$ элементов. Если тип элемента - double, то размер массива - $3.2 \cdot 10^9$ байт.
У вас скорее всего проблема компилятора Delphi, а не Windows 7/64b.

P.S. В VC2008 тоже нельзя выделить в стеке массив более 2 Гб. MS советует выделять большие массивы в куче (heap) - malloc() или new[]. Аналогов для Delphi я не помню, но они наверняка есть.

 
 
 
 Re: Delphi EX3 64-bit
Сообщение18.02.2014, 06:32 
GetMem('указатель','размер в байтах')
FreeMem('указатель','размер в байтах')

Но лучше, конечно, объявить новый тип данных - Ваш массив. И еще новый тип данных - указатель на данный массив, тогда компилятор сам рассчитает сколько памяти просить у системы, при Вашем запросе с помощью ф-ии new('указатель'), освобождение: dispose ('указатель'). Должно работать.

 
 
 
 Re: Delphi EX3 64-bit
Сообщение18.02.2014, 09:05 
Yuri Gendelman в сообщении #805327 писал(а):
MS советует выделять большие массивы в куче (heap) - malloc() или new[]. Аналогов для Delphi я не помню, но они наверняка есть.
Если я ничего не путаю, то Delphi по умолчанию создает объекты и динамические массивы в куче.

Хм... Fgolm, а вы какой массив создаете? Попробуйте объявить именно динамический, а потом задать ему размер с помощью SetLength.

 
 
 [ Сообщений: 6 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group