SafeArray выделение памяти и ее возврат системе

X-Cite
Дата: 24.10.2019 02:25:50
Может, кто-нибудь знает что это такое?

Windows 10
До выполнения выделено памяти 7 Мб
После выполнения 10 Мб
Пик выделения 99 Мб

Куда захавало 3 Мб. Причем, если выполнить несколько/много раз, то больше 3-4 Мб не поднимается.
Также заметил, что если долго ничего не делать, память вернулась обратно до 7 Мб (Долго это около часа)

Windows 7 - хавает примерно 600 Кб

Суть: Есть сервис, работает с OLE приложением. Пихает в него большие вариантные массивы созданные через VarArrayCreate. Пик памяти до 5 Гб доходит, когда в очереди накапливается много массивов.
После такого прохода, остается висеть около 250 Мб. Если запустить процесс еще несколько раз, останутся те же 250 Мб. И пик будет тот же.
Грешил на обертку Delphi, но вижу что прямой вызов ведет также.

Теоретически, все равно сколько памяти сожрало и не отдало, ее много и не жалко, но хочется понимать модель поведения...

procedure TForm1.Button1Click(Sender: TObject);
var
  List: TArray<PSafeArray>;
  k: Int32;
  Bound: packed array[0..1] of SAFEARRAYBOUND;
begin
  Bound[0].cElements := 1000;
  Bound[0].lLbound := 0;
  Bound[1].cElements := 10;
  Bound[1].lLbound := 0;
  SetLength(List, 500);
  for k := 1 to 500 do
  begin
    List[k - 1] := SafeArrayCreate(VT_VARIANT, 2, @Bound);
  end;

  for k := 1 to 500 do
    SafeArrayDestroy(List[k - 1]);
end;
vavan
Дата: 24.10.2019 10:00:44
X-Cite
заметил, что если долго ничего не делать, память вернулась обратно
поигралось и отпустило
X-Cite
хочется понимать модель поведения
модель поведения виндового системного аллокатора можно просто принять и простить, оно от версий и редакций всяко разно умеетКартинка с другого сайта.