2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Delphi EX3 64-bit
Сообщение23.12.2013, 20:50 
Заслуженный участник
Аватара пользователя


31/10/06
371
РФ, РК, г.Симферополь
Здравствуйте!
Не могу пока понять, почему в Delphi EX3 64-bit при выбранной платформе Win64 на 64-битной Windows7 при компиляции проекта выдаётся ошибка о превышении 2Гб для типа: задаю массиив 20000 на 20000.
Спасибо.

 Профиль  
                  
 
 Re: Delphi EX3 64-bit
Сообщение23.12.2013, 21:03 
Заслуженный участник


15/05/05
3445
USA
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 
Заслуженный участник
Аватара пользователя


31/10/06
371
РФ, РК, г.Симферополь
Даже double выдаёт ту же ошибку. Я проверял на lazarus-64 там такой проблем не вознило, задавал массивы и >30000

 Профиль  
                  
 
 Re: Delphi EX3 64-bit
Сообщение24.12.2013, 01:02 
Заслуженный участник


15/05/05
3445
USA
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 


17/02/14
25
Россия, ХМАО-Югра, Сургут
GetMem('указатель','размер в байтах')
FreeMem('указатель','размер в байтах')

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

 Профиль  
                  
 
 Re: Delphi EX3 64-bit
Сообщение18.02.2014, 09:05 
Заслуженный участник


06/07/11
5627
кран.набрать.грамота
Yuri Gendelman в сообщении #805327 писал(а):
MS советует выделять большие массивы в куче (heap) - malloc() или new[]. Аналогов для Delphi я не помню, но они наверняка есть.
Если я ничего не путаю, то Delphi по умолчанию создает объекты и динамические массивы в куче.

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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group