powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / работа с большими объёмами памяти
45 сообщений из 45, показаны все 2 страниц
работа с большими объёмами памяти
    #39474605
user_a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как можно выделить объём памяти более 2 гб?
без ключа LARGEADDRESSAWARE выделяется менее 1 гб, с ключом - 2.1 гб.
как выделять память, неважно, хоть через SetLength, хоть через VirtualAlloc.
fastmm, и т.д. не влияет (delphi 7)
какие ещё есть способы для работы с данными более 2 гб, кроме перехода на 64 бит?
все данные должны быть в памяти одновременно, для скорости работы.
по идее, для 32-битного приложения предел - 4 гб. хотелось бы иметь возможность получить хотя бы все 4 (т.е., 3 с чем-то).

В 64-bit Windows для 32-bit процесса доступно:
2ГБ и 4ГБ (если приложение компилируется с параметром IMAGE_FILE_LARGE_ADDRESS_AWARE)
...
Рейтинг: 0 / 0
работа с большими объёмами памяти
    #39474606
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Address Windowing Extensions (AWE)
Все есть в MSDN (AWE API):

http://msdn.microsoft.com/library/en-us/memory/base/address_windowing_extensions.asp
...
Рейтинг: 0 / 0
работа с большими объёмами памяти
    #39474607
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
...
Рейтинг: 0 / 0
работа с большими объёмами памяти
    #39474610
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user_aкакие ещё есть способы для работы с данными более 2 гб, кроме перехода на 64 бит?


На дворе уже пардон, 2017 год, пора бы на 64 бита перейти, если нужно с большими объемами работать.
...
Рейтинг: 0 / 0
работа с большими объёмами памяти
    #39474717
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
работа с большими объёмами памяти
    #39474722
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
...
Рейтинг: 0 / 0
работа с большими объёмами памяти
    #39474746
user_a, Возможно ТСу поможет эта команда

запускаем cmd и вводим bcdedit /set Increaseuserva 3072 (вместо 3072 можно ввести любое число)

Что бы вернуть все обратно нужно ввести: bcdedit /deletevalue increaseuserva
...
Рейтинг: 0 / 0
работа с большими объёмами памяти
    #39474838
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator, мне показалось он хочет одним куском, раз упомянул SetLength.

AWE требует привилегии Lock Pages in Memory, что обычным пользователям (и даже админам) не дают. Если в системе есть куча оперативной памяти, то гораздо проще написать 64-битное приложение, благо сегодня это возможно в Delphi.

С другой стороны, проецируемые в память файлы не требуют дополнительных привилегий и могут быть сколь угодно большими (ограничены только файлом подкачки/местом на диске).
...
Рейтинг: 0 / 0
работа с большими объёмами памяти
    #39474843
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПаWWWлОдАрЕц, в 64-битной ОС смысла в этом параметре нет. 32-битным приложениям доступно 4 гигабайта.

http://www.gunsmoker.ru/2011/04/windows-spin-off.html#n7
...
Рейтинг: 0 / 0
работа с большими объёмами памяти
    #39474847
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
GunSmokerdefecator, мне показалось он хочет одним куском, раз упомянул SetLength.

user_aкак выделять память, неважно, хоть через SetLength, хоть через VirtualAlloc.

GunSmokerAWE требует привилегии Lock Pages in Memory, что обычным пользователям (и даже админам) не дают.

Не очень ясно про этот момент, так как у меня до сих пор работает такая софтина под WinXP и Win7 без проблем, писаная ещё в 2012-м году на D7.

GunSmokerЕсли в системе есть куча оперативной памяти, то гораздо проще написать 64-битное приложение, благо сегодня это возможно в Delphi.
Конечно, проще. Но если есть определённые ограничения - например, переход на новую версию Delphi невозможен - то приходится выкручиваться на том, что есть.
...
Рейтинг: 0 / 0
работа с большими объёмами памяти
    #39474856
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
А, сейчас поглядел в код.
Я там сам пытаюсь эту привилегию установить.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
{ получение или возвращение привилегий на блокировку физических страниц }
function SetLockPagesPrivilege(Process: THANDLE; Enable: Boolean): Boolean;
const
     SE_LOCK_MEMORY_NAME = 'SeLockMemoryPrivilege';
type
    DWORDPTR = ^DWORD;
var
   Token: THANDLE;
   Info: TTokenPrivileges;
begin
     // открыть токен
     Result := OpenProcessToken(Process, TOKEN_ADJUST_PRIVILEGES, Token);
     if not Result then Exit;

     try
        // enable или disable
        Info.PrivilegeCount := 1;
        if Enable then
          Info.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
        else
          Info.Privileges[0].Attributes := 0;

        // получить LUID
        Result := LookupPrivilegeValue(nil, SE_LOCK_MEMORY_NAME, Info.Privileges[0].Luid);
        if not Result then Exit;

        // привилегии
        Result := AdjustTokenPrivileges(Token, False, Info, 0, PTokenPrivileges(nil)^, DWORDPTR(nil)^);
        if not Result then Exit;

        Result := GetLastError = ERROR_SUCCESS;
     finally
       CloseHandle(Token);
     end;  
end;

{ резервирование физической памяти (вернет 0, если неудачно) }
function AllocPhysicalMemory(Size: LongWord): LongWord;
var
   PageCount: LongWord;
   MemoryItem: PMemoryItem;
begin
     Result := 0;

     if not SetLockPagesPrivilege(GetCurrentProcess, True) then Exit;

     PageCount := Size div PageSize;
     if Size mod PageSize <> 0 then Inc(PageCount);

     MemoryItem := AllocMem(8 + PageCount * SizeOf(LongWord));
     if MemoryItem = nil then Exit;

     try
        { резервирование физической памяти }
        MemoryItem.PageCount := PageCount;
        if not AllocateUserPhysicalPages(GetCurrentProcess, PageCount, @MemoryItem.Pages[0])
         then Exit;

        { проверка, все ли страницы зарезервированы }
        if PageCount <> MemoryItem.PageCount then
         begin
              FreeUserPhysicalPages(GetCurrentProcess, PageCount, @MemoryItem.Pages[0]);
              Exit;
         end;

        Result := LongWord(MemoryItem);
     finally
       if Result = 0 then FreeMem(MemoryItem);
     end;
end;

...
Рейтинг: 0 / 0
работа с большими объёмами памяти
    #39474876
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator, ну так посмотри, что там с привилегиями-то. У меня, к примеру, всюду AllocateUserPhysicalPages завершается с ERROR_PRIVILEGE_NOT_HELD.

P.S. Ты же понимаешь, что AWE, фактически, отключает paging и поэтому предназначен для приложений-серверов, которые запускаются на машине, специально выделенной исключительно для работы этого приложения? Вроде SQL-сервера.
...
Рейтинг: 0 / 0
работа с большими объёмами памяти
    #39474877
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecatorЯ там сам пытаюсь эту привилегию установить.ЕМНИП, если в политиках нет разрешения на "закрепление страниц", то процесс не сможет установить/включить эту привилегию. А по-умолчанию она вроде отключена, т.е. нужны доп. действия со стороны администратора.
...
Рейтинг: 0 / 0
работа с большими объёмами памяти
    #39474900
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Фик его знает, можно подебажить, но софтина работает же как-то
...
Рейтинг: 0 / 0
работа с большими объёмами памяти
    #39474981
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А меня вот интересует вопрос - а назачем 4 и больше Гб в память пихать?
...
Рейтинг: 0 / 0
работа с большими объёмами памяти
    #39474988
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster,

Для скорости. Разве есть еще варианты?
...
Рейтинг: 0 / 0
работа с большими объёмами памяти
    #39474997
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user_a,

Для 32 бит и одновременно никак. Но можно организовать большой файл и мапить из него куски. Ведешь условно говоря кеш, где учитываешь какие части маплены и куда и пересчитываешь свой большой условный указатель в номер куска и в физическое смещение внутри этого куска, получаешь текущий физический адрес. Если данные расположить относительно удачно, чтобы было много попаданий в мапленные куски, то может и не слишком тормознет.
...
Рейтинг: 0 / 0
работа с большими объёмами памяти
    #39476137
user_a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сделал двухмерный массив, вместо одномерного. выделяются несколько больших кусков, а при обращении пересчитывается одномерный указатель в двухмерный. так можно выделить где-то до 3-х гб. до конца - не пробовал. если уж не будет хватать, то, может, и придётся думать о переходе на 64 бит.
на самом деле, даже на пересчёте указателя из одномерного в двухмерный, теряется производительность - процентов 10, но всё-таки.
там не просто линейный цикл, который можно бы было заменить на два вложенных цикла, а иногда возможно чтение из произвольного места, поэтому приходится пересчитывать указатель на каждой итерации.
к тому же, если нужно обратиться к предыдущему элементу массива, а текущий - является первым (нулевым) элементом в очередном "куске", то для получения предыдущего - недостаточно отнять 1, а он должен быть последним элементом в предыдущем "куске".
помня о не всегда линейном доступе, значения с предыдущей итерации не всегда можно запомнить.
даже пробовал, общий указатель - integer, и из него, предположим, 25 бит использовать на внутренний массив, а 6 - на внешний, тогда можно получать из указателя сразу 2 значения, но получилось в несколько раз медленнее.
делал так:
inner:=a and $1FFFFFF;
outer:=(a shr 25) and $3F;
может, бинарные операции - слишком медленные, либо я чего-то не понимаю.

насчёт 64 бит - помня о том, сколько занимают новые версии delphi, как-то не хочется. если новая версия весит в 10, к примеру, раз больше (а на самом деле, ещё больше), значит, в ней, что, в 10 раз больше функций? значит, эффективность занимаемого пространства - сильно уменьшилась.
предположим, взять delphi... 7, которая занимает, там, 300 метров, и позволяет писать законченные приложения, или новые версии, которые - несколько Гб. если оставить разработку только для Win32, вот что там занимает место? новые компоненты? и во сколько они раз больше? и всё это занимает код? это сколько же нужно кода - тогда можно бы было вместить среды разработки для нескольких различных архитектур в то же самое место, а не в "ещё больше".
...
Рейтинг: 0 / 0
работа с большими объёмами памяти
    #39476147
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Двумерный массив логично было бы обрабатывать двумя циклами.

outer:=a shr 25; //это лишнее and $3F;
...
Рейтинг: 0 / 0
работа с большими объёмами памяти
    #39476175
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще в порядке извращения:

На 64 битной OS каждый процесс может получить эти самые 2-3 гига.

Создай кластер из несколькиз 32 битных процессов.
...
Рейтинг: 0 / 0
работа с большими объёмами памяти
    #39476182
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,

Кластерный менеджер памяти напишешь сам. ;)
...
Рейтинг: 0 / 0
работа с большими объёмами памяти
    #39476195
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
rgreatrgreat,

Кластерный менеджер памяти напишешь сам. ;)
самый быстрый в мире (с)
...
Рейтинг: 0 / 0
работа с большими объёмами памяти
    #39476202
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator,

Понятно дело что самый быстрый. Он же один такой будет. :)
...
Рейтинг: 0 / 0
работа с большими объёмами памяти
    #39476206
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Майнеры потянулись? )
По поводу 'зачем'? Случаи всякие бывают. 8 гиг, занимаемые станциями, у нас - рутина. 64 бита, само собой.
...
Рейтинг: 0 / 0
работа с большими объёмами памяти
    #39476432
user_a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а под 64 бит же тоже может не оказаться непрерывного куска в несколько ГБ? тогда в чём разница, именно в этой части? т.е., всё равно придётся создавать массив "по частям".

а ещё в delphi переменная не может быть более 2 гб. так что "одним куском" и так бы не получилось.
...
Рейтинг: 0 / 0
работа с большими объёмами памяти
    #39476435
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user_aа под 64 бит же тоже может не оказаться непрерывного куска в несколько ГБ? тогда в чём разница, именно в этой части? т.е., всё равно придётся создавать массив "по частям".

а ещё в delphi переменная не может быть более 2 гб. так что "одним куском" и так бы не получилось.
Вы хотите странного.
Зачем вам непрерывный кусок памяти более 2-х гб да еще "в одной переменной" (даже не знаю что бы это значило)?

P.S. Поставьте на сервер 512 Гб оперативки. Все шансы на то что 4 гига непрерывным куском вы найдете.
...
Рейтинг: 0 / 0
работа с большими объёмами памяти
    #39476440
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
var
  B : TBytes;
begin
  SetLength(B,NativeInt(5)*1024*1024*1024);



Выделился массив на 5 гигов. Что я делаю не так?
...
Рейтинг: 0 / 0
работа с большими объёмами памяти
    #39476443
user_a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну, тот же динамический массив - одна переменная.
а если задавать тип как одномерный массив, а другой тип, как одномерный массив элементов первого типа, то переменная 2-го типа будет хранить указатели на переменные 1-го типа, каждые из которых не могут превышать 2 гб, но в целом "массив" может превышать 2 гб.
а если задать сразу двухмерный массив в одном типе данных, то весь массив не сможет превышать 2 гб.

это в delphi 32-бит, в смысле.

и в каком виде предлагается хранить линейную последовательность данных большого объёма, чтобы по-правильному?
...
Рейтинг: 0 / 0
работа с большими объёмами памяти
    #39476455
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,

попробуй, к слову, в него залить 5 гиг. получится?
...
Рейтинг: 0 / 0
работа с большими объёмами памяти
    #39476456
Bred eFeM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user_a, ну,тот же динамический массив - одна переменная.да, одна переменная - глобальная или на стеке, размер которой SizeOf(Pointer).
И в эту переменную, после удачного вызова GetMem или SetLength, будет записан адрес (начало)
виртуального адресного куска нужной длины.

и в каком виде предлагается хранить линейную последовательность данных большого объёма,на диске в файле.
...
Рейтинг: 0 / 0
работа с большими объёмами памяти
    #39476461
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonrgreat,

попробуй, к слову, в него залить 5 гиг. получится?
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
var
  B : TBytes;
  i : integer;
  s : string;
begin
  SetLength(B,NativeInt(5)*1024*1024*1024);
  for i:=0 to High(B) do begin
    B[i]:=i and $FF;
  end;

  s:='';
  for i:=High(B)-10 to High(B) do begin
    s:=s+';'+B[i].ToString;
  end;
  ShowMessage(s);



';245;246;247;248;249;250;251;252;253;254;255'
...
Рейтинг: 0 / 0
работа с большими объёмами памяти
    #39476462
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
i : Int64;
конечно-же.
...
Рейтинг: 0 / 0
работа с большими объёмами памяти
    #39476463
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В памяти - 5 с лишним гигов.
...
Рейтинг: 0 / 0
работа с большими объёмами памяти
    #39476464
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user_aи в каком виде предлагается хранить линейную последовательность данных большого объёма, чтобы по-правильному?В том, который нужен по условию задачи.
Если это не мешает быстродействию.
...
Рейтинг: 0 / 0
работа с большими объёмами памяти
    #39476466
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На очень больших объемах я бы посоветовал рекорды.
...
Рейтинг: 0 / 0
работа с большими объёмами памяти
    #39476473
Bred eFeM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user_aэффективность занимаемого пространства - сильно уменьшилась. https://kent.dl.sourceforge.net/project/freepascal/Win32/3.0.2/fpc-3.0.2.i386-win32.cross.x86_64-win64.exe
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
program pr;
const
 c = 1024*1024*1024*5;
var
 t : PByte;
 i : NativeInt;
begin
 GetMem(t, c);
 for i := 1 to c do begin
  t^ := Byte(i);
  Inc(t);
 end;
 Dec(t, c);
 FreeMem(t);
end.

Код: plaintext
1.
ppcrossx64.exe pr.dpr
pr.exe
...
Рейтинг: 0 / 0
работа с большими объёмами памяти
    #39476490
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user_aа под 64 бит же тоже может не оказаться непрерывного куска в несколько ГБ?

Крайне маловероятно. Там теоретические 16 эксабайт, с практическим пределом в 8 Тб для user mode (надо проверить, может в последних версиях Windows уже подняли).

user_aа ещё в delphi переменная не может быть более 2 гб

Смотря какая переменная.
...
Рейтинг: 0 / 0
работа с большими объёмами памяти
    #39476725
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В этом вопросе главное не путать физическую память с виртуальной памятью процесса. Под х64 нет проблем выделить большой непрерывный кусок. Размер будет ограничиваться только размером подкачки.
...
Рейтинг: 0 / 0
работа с большими объёмами памяти
    #39476799
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barmaley57,

у некоторых программ с этим проблемы. Я столкнулся с таким, когда эмулятору андроида (во времена ХЕ5) задал устройство с 512мб памяти, и он при старте псевдо-устройства не мог выделить кусок памяти. Хотя на 16 гиг RAM было свободно больше половины. Помогала только перезагрузка ОС и сразу запуск эмулятора.
...
Рейтинг: 0 / 0
работа с большими объёмами памяти
    #39476970
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barmaley57В этом вопросе главное не путать физическую память с виртуальной памятью процесса. Под х64 нет проблем выделить большой непрерывный кусок. Размер будет ограничиваться только размером подкачки.
В ряде случаев, на Windows, нифига ничего не выделяется. Почему и в чем у кого проблемы, фиг его знает.

Сталкивался на Windows 7, комп с RAM 32 Gb, при попытке запускать много приложений иногда около 6-8 Gb под Java JVM одним куском Windows выделить не мог. Хотя и виртуальной и даже просто free памяти (32 Gb - использованное место) было достаточно.

На компе запускалась пара виртуалок в VmWare Player'е + JDeveloper + пара инстанцев WebLogic + Oracle Database.
...
Рейтинг: 0 / 0
работа с большими объёмами памяти
    #39476978
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevВ ряде случаев, на Windows, нифига ничего не выделяется. Почему и в чем у кого проблемы, фиг его знает.
Подкачка,проецируемые в память файлы, кэш... Где-то должен быть затык.
...
Рейтинг: 0 / 0
работа с большими объёмами памяти
    #39476980
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мешала фрагментация скорей всего.
Нужен-то непрерывный кусок в 6-8 гб.
...
Рейтинг: 0 / 0
работа с большими объёмами памяти
    #39476983
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatМешала фрагментация скорей всего.
Нужен-то непрерывный кусок в 6-8 гб.Не помню точно, но есть флаги для выделения памяти сверху/снизу. Может снизу был облом из-за фрагментации. Но сверху никто не мешает замапить кусок. В х64 сколько адресного пространства - попой ешь.
...
Рейтинг: 0 / 0
работа с большими объёмами памяти
    #39476987
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я к тому, что утверждение
В этом вопросе главное не путать физическую память с виртуальной памятью процесса. Под х64 нет проблем выделить большой непрерывный кусок. Размер будет ограничиваться только размером подкачки.

не совсем истинное. Проблемы могут быть. В чем и у кого... ОС, кривые руки разработчиков, что-то еще... не столь важно.

В общем, не стал бы относить решение "выделить дофига ГигаБайт одним куском" к бест практикс. IMHO
...
Рейтинг: 0 / 0
работа с большими объёмами памяти
    #39476998
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev, ну дык авторРазмер будет ограничиваться только размером подкачки
А так-то да. Какой-нить орацл забабахает mmf, выжрав всю подкачку и привет. А теоретически - проблем нет. Для х86 нельзя выделить 5 гигов даже теоретически, а для х64 - можно. Вот я о чем.
...
Рейтинг: 0 / 0
45 сообщений из 45, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / работа с большими объёмами памяти
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]