Crash on moving files to 7z file

Здесь можно сообщить о найденных багах в Far.
my.farmanager
Posts: 50
Joined: Mon 18 Mar, 2013 14:01

Crash on moving files to 7z file

Post by my.farmanager »

Latest post of the previous page:

2useven10 wrote: Wed 31 Aug, 2022 09:11 В 6014 7z.dll 22.00 -> 22.01
Почему то кажется что причина не в 7z. Падение всегда происходит уже после обработки архива. В момент чтения папки с файлами.

Сейчас попробовал закрыть Яндекс браузер. Свободной памяти стало 400-500Мб. Процесс FAR еще подрос после этого до 650Мб. Но снова упал после переноса файлов в архив, хотя свободной памяти было 20-30Мб.
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Crash on moving files to 7z file

Post by Shmuel »

my.farmanager wrote: Wed 31 Aug, 2022 09:17 Почему то кажется что причина не в 7z.
my.farmanager wrote: Wed 31 Aug, 2022 09:17 хотя свободной памяти было 20-30Мб.
Причина в недостатке памяти.
Когда свободной памяти 20Мб, вообще говорить не о чем.
2useven10
Posts: 5211
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

Crash on moving files to 7z file

Post by 2useven10 »

Нужен непрерывный блок памяти на список из 900к файлов.
Даже если свободной памяти хватит (тоже не факт) она может быть фрагментирована.
На x86 без ухищрений задаче доступно около 2ГБ памяти (с бубном меньше 3ГБ),
на x64 даже для x86 процесса доступны почти все 4ГБ адресного пространства.
Вашей системе памяти недостаточно, переход на x64 полезен даже без добавления физической памяти.
Last edited by 2useven10 on Wed 31 Aug, 2022 09:32, edited 1 time in total.
my.farmanager
Posts: 50
Joined: Mon 18 Mar, 2013 14:01

Crash on moving files to 7z file

Post by my.farmanager »

2useven10 wrote: Wed 31 Aug, 2022 09:31 Нужен непрерывный блок памяти на список из 900к файлов.
А почему список файлов занимает так много памяти? Это же список, просто перечень.
2useven10
Posts: 5211
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

Crash on moving files to 7z file

Post by 2useven10 »

20-30 байт на файл это много?
размер - 8, времена - минимум 3*8, атрибуты - 4 ... уже 36, до имени даже не добрались.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Crash on moving files to 7z file

Post by buniak_a_h »

my.farmanager wrote: Wed 31 Aug, 2022 11:16 А почему список файлов занимает так много памяти?
В учебниках есть такой пример: в цикле s := s + c (s - строка, c - один символ). В таком виде на 32-разрядных системах память исчерпывается при длине s около 10 тысяч символов. Дело не только в памяти, а в дескрипторах (при присваивании выделяется новый участок, старый не используется, на новый участок выделяется дескриптор памяти, а их общее количество в системе очень ограниченно). Так что многое зависит от реализации в 7z.dll
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Crash on moving files to 7z file

Post by Shmuel »

buniak_a_h, на 32-битном Фаре попробовал, сделал цикл на 100 тыс. Память не исчерпалась.

Code: Select all

collectgarbage "stop"
local s=""
for k=1,100000 do s=s.."a" end
far.Message(s)
collectgarbage "restart"
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Crash on moving files to 7z file

Post by buniak_a_h »

Shmuel, к ФАРу это не имеет отношения (как, впрочем, и 7z.dll). Пример был для проекта на Object Pascal-е (Delphi). Я проверял - подтвердилось. Я не знаю, что такое 32-разрядный дескриптор, но прога вылетала именно с сообщением об их исчерпании.
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Crash on moving files to 7z file

Post by Shmuel »

buniak_a_h, вот то же свмое на 32-битном C++Builder 5.0 (у которого под капотом сидит Delphi). Память не исчерпана.

Code: Select all

#include <vcl.h>
#pragma hdrstop
#pragma argsused
int main(int argc, char* argv[])
{
  AnsiString s = "";
  for (int i=0; i<100000; i++) s += "a";
  ShowMessage(s.Length());
  return 0;
}
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Crash on moving files to 7z file

Post by buniak_a_h »

Shmuel, я посмотрел наши истории.
  1. Ограничение- 8192 дескрипторов.
  2. Обойти это ограничение (точнее, отодвинуть на много) удалось применением нестандартного менеджера памяти FastMM
  3. Ещё этот момент, возможно, зависит и от версии Delphi, тем более от компилятора.
Last edited by buniak_a_h on Wed 31 Aug, 2022 13:36, edited 1 time in total.
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Crash on moving files to 7z file

Post by Shmuel »

buniak_a_h wrote: Wed 31 Aug, 2022 13:35 Ещё этот момент, возможно, зависит и от версии Delphi, тем более от компилятора.
Версия, которой я пользовался, от 2000 года.
User avatar
HaRT
Moderator
Posts: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Crash on moving files to 7z file

Post by HaRT »

2useven10 wrote: Tue 30 Aug, 2022 14:36 7z в режиме ультра на большом непрерывном архиве вполне может съесть всю память x86.
А мне вот интересно, в какой момент ArcLite отдаёт отъеденную при перепаковке память обратно: сразу по окончании перепаковки (успешном или нет), при закрытии панели, при выгрузке плагина или никогда (т.е. при завершении процесса)?
Фар есть инструмент, а не нянька. © 2009 DrKnS
2useven10
Posts: 5211
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

Crash on moving files to 7z file

Post by 2useven10 »

память для перепаковки берёт и освобождает 7z.dll, она должна освобождаться после завершения.
в процессе работы в arclite вызываются callback-и которым тоже может требоваться память.
фрагментация возможна даже если 7z.dll освободит всю взятую память.
Post Reply

Return to “Глюки и баги”