Аномальное поведение

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

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

Аномальное поведение

Сообщение solomon243 » 12.05.2014 22:25:53

Написал небольшую программку

Код: Выделить всё
program hangup;

uses sysutils;
type
spamarray = array [0..500000000] of byte; //A half-gig array of bytes

var

i: LongInt;
j: LongInt;
z: byte;
logfile: text;
fatmass: array [0..3] of spamarray;

procedure RefillSpamarray; //periodically we pull a spam blocks...
var
ii: byte;
zz: byte;
jj: LongInt;
begin
   Writeln(logfile, DateTimeToStr(Now)+' STARTING REINITIALIZATION.');
   Flush(logfile);
   ii := Random(3);
   zz := Random(255);
   for jj := 0 to SizeOf(fatmass[ii]) do
      begin
      fatmass[ii][jj]:=zz;
      end;
   Writeln(logfile, DateTimeToStr(Now)+' Refilled block Nr '+IntToStr(ii)+   ' with value= '+
         IntToStr(zz));
   Flush(logfile);
end;

BEGIN
Assign(logfile, 'hangup.log');
Append(logfile);
Randomize;
for i := 0 to 3 do begin   //fill four half-gig arrays with rand. databyte
   z := Random(255);
   for j := 0 to (SizeOf(fatmass[i])-1) do
      begin
      fatmass[i][j]:=z;
      end;
Writeln(logfile, DateTimeToStr(Now)+' Block Nr '+IntToStr(i)+   ' initialized with value= '+
         IntToStr(z));
   Flush(logfile);      
end;
i:=1;
z:=1;

while i <> 0 do
   begin
   z:= z * i;
   if i = 2147483647 then
      begin
         RefillSpamarray;
         i := 1;
      end;
      Inc(i);
   end;
END.


Успешно компилится и запускается под Linux (kernel 3.2.0)
Однако под виндами (пробовал Xp и Win7 (x32)) выдает:
Изображение
solomon243
новенький
 
Сообщения: 13
Зарегистрирован: 09.05.2014 23:57:56

Re: Аномальное поведение

Сообщение Дож » 13.05.2014 00:34:38

Проблема с типом spamarray. Большие объёмы данных нужно выделять динамически.
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47

Re: Аномальное поведение

Сообщение SSerge » 13.05.2014 05:16:54

Что-то мне подсказывает, что хоть динамически, хоть статически выделяй... Общий размер данных только на этом массиве 2 Гб. Если мне память не изменяет, под Windows 32х суммарно под данные и код одного процесса может быть выделено не более 2Gb.
SSerge
энтузиаст
 
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Re: Аномальное поведение

Сообщение solomon243 » 13.05.2014 06:23:42

Вот это уже дело...
solomon243
новенький
 
Сообщения: 13
Зарегистрирован: 09.05.2014 23:57:56

Re: Аномальное поведение

Сообщение Sergei I. Gorelkin » 13.05.2014 16:16:37

Надо исправлять компилятор, чтобы на таких примерах он выдавал ошибку, а не создавал неправильный .exe...
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1407
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Аномальное поведение

Сообщение Vadim » 13.05.2014 16:35:12

SSerge писал(а):Если мне память не изменяет, под Windows 32х суммарно под данные и код одного процесса может быть выделено не более 2Gb.

Со специальным флагом в boot.ini под данные можно выделить 3 ГБ, но за счёт уменьшения памяти для кода программы.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Аномальное поведение

Сообщение solomon243 » 14.05.2014 06:35:31

Sergei I. Gorelkin писал(а):Надо исправлять компилятор, чтобы на таких примерах он выдавал ошибку, а не создавал неправильный .exe...


Кстати, да. Баг же??
solomon243
новенький
 
Сообщения: 13
Зарегистрирован: 09.05.2014 23:57:56

Re: Аномальное поведение

Сообщение stanilar » 14.05.2014 17:23:06

Win64 ограничено 8TB. Так что не факт что ошибка.
stanilar
постоялец
 
Сообщения: 289
Зарегистрирован: 09.03.2010 19:09:02

Re: Аномальное поведение

Сообщение Sergei I. Gorelkin » 14.05.2014 20:33:30

Это про виртуальное адресное пространство, а формат исполняемых файлов почти не изменился по сравнению с Win32 и унаследовал все 32-битные ограничения. Размер статических данных по-прежнему не может превышать 2 ГБ.
Поведение компилятора - скажем так, не ошибка, а отсутствие нужных проверок.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1407
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Аномальное поведение

Сообщение stanilar » 15.05.2014 10:22:26

Отношусь к AWS как к полной памяти приложения, может потому что программирую на delphi под win32. Может потому, что "out of memory" практически всегда указывает на большую фрагментацию этих адресов, из-за чего нельзя получить большой непрерывный ряд для этих адресов под память.

Ведь все что делается в программе будет доступно через адреса, и вопрос только в том как мы эти адреса распределим.

Кстати, в ошибке, винда написала что приложение "не win32". Т.е. она поняла, может и по формату файла, что приложению может потребоваться больше 2gb памяти. Интересно как поведет себя приложение под win64.
stanilar
постоялец
 
Сообщения: 289
Зарегистрирован: 09.03.2010 19:09:02

Re: Аномальное поведение

Сообщение solomon243 » 15.05.2014 23:24:06

stanilar писал(а): Интересно как поведет себя приложение под win64.


Запустилось нормально под Win64 (4 Gb RAM)
solomon243
новенький
 
Сообщения: 13
Зарегистрирован: 09.05.2014 23:57:56

Re: Аномальное поведение

Сообщение Art!P » 24.05.2014 21:28:14

ваше приложение скомпилировано на 64-битный вин.
У меня такая ситуация, дома стоял 64-битный ФПС и вин64, на работе компилятор 32 и вин32, прога скомпилированная на win64 не работает на win32. Приходилось код компилировать под 32 и 64.
Это не удобно и домашнем удалил 64 и поставил 32-хбитную версию компилятора
Аватара пользователя
Art!P
новенький
 
Сообщения: 27
Зарегистрирован: 28.07.2012 14:37:53

Re: Аномальное поведение

Сообщение Cheb » 26.06.2014 10:33:30

ЭЭ, вин64 же, вроде, построен как кросс-компиляция с вин32? У меня стоят оба одновременно, одним батником собираю и 32 и 64. Только в первом случае вызываешь fpc, а во втором ppcrossx64
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34


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

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

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

Рейтинг@Mail.ru