Skip to main content

Конференции

Просмотр конференции fido7.pushkin.local:

Предыдущее Следующее

Дата: 15 May 2019, 09:45:54
От: Anatoliy Sablin @ 2:5020/2140.704
Кому: Andrei Mihailov
Тема: win via usd


Hello, Andrei Mihailov.
On 15.05.2019 6:05 you wrote:

 AS>>>>>> Если перепишут на питоне, то помимо увеличенного жора памяти
 AM>>>>> Питон работает с памятью хуже чем Си? Ок, пусть тогда  
 AM>>>>> перепишет  на  Паскале - там нет проблем с потерями памяти
 AS>>>> Что значит "работает с памятью хуже"? То, что структуры  
 AS>>>> занимают  больше памяти? Да, это так. Автоматическое  
 AS>>>> освобождение памяти    после использовании, которое есть в  
 AS>>>> питоне, но нет в си - это   тоже  относится к "работает с  
 AS>>>> памятью хуже"?
 AM>>> Вот именно это я и имел в виду - что он сам автоматически    
 AM>>> освобождает память (чего не делает си) и соответственно, это   
 AM>>> лучше  т.к. программист не забудет освобождать и память не будет 
 AM>>> теряться.
 AS>>>> То есть, если не освобождать память в Паскале, то это не утечка 
 AS>>>> и  он сам освободит её?
 AM>>> Да
 AS>> То есть в паскале можно спокойно писать следующий код: var a:   
 AS>> array [0..1000000000] of byte; i: long; begin
 AS>>   for i := 0 to 1000000000 do
 AS>>   begin
 AS>>     i = getmem (1024 * 1024 * 1024 * 1024);
 AS>>     fillbyte(i, sizeof(i), 33);
 AS>>   end;
 AS>> end; И программа не упадёт из-за жора памяти?
 AM> Устранив синтаксические ошибки (; после end) запустил эту  
 AM> программу на смартфоне (среда PascalGUI с компилятором FreePascal) 
 AM> - ничего не упало и не зависло...

Да, потому что пример неправильный. И getmem динамически выделяет память, поэтому чтобы упало, надо ждать ооооооооооочень долго, пока на 4байта будет утекать всё.

Исправленный вариант:

Program t;

Type 
  v = array [0..1000000000] Of char;

Var a: ^v;
  i, j: Longint;
Begin
  For i := 0 To 10000000 Do
    Begin
      a := getmem(1024*1024*64);
      For j:= 0 To 100 Do
        Begin
          a^[j] := 'a';
        End;
      writeln(sizeof(a));
      writeln(i);
    {  dispose(a);}
    End;
End.

Почему такой код падает с ошибкой, а, если раскомментировать dispose, то уже не падает?
--
Best regards!
Posted using Hotdoged on Android

--- Hotdoged/2.13.5/Android
Origin: Android device, Milky Way (2:5020/2140.704)

Предыдущее Следующее

К списку сообщений
К списку конференций