1

Тема: AHK: Выгрузка переменной из памяти

Как мне выгрузить переменную из памяти? К примеру, мне надо выгрузить переменную myVar, как это реализовать?

P.S. В C/C++ для этого используют указатель на переменную (int *myVar = new myVar), а потом просто delete myVar;

2

Re: AHK: Выгрузка переменной из памяти

Если в переменной меньше 4096 байт, то

VarSetCapacity(myVar, 0)

иначе просто

myVar := ""

Первый вариант подойдёт в любом случае.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3 (изменено: MoZg, 2015-07-22 16:19:54)

Re: AHK: Выгрузка переменной из памяти

teadrinker пишет:

Если в переменной меньше 4096 байт, то

VarSetCapacity(myVar, 0)

иначе просто

myVar := ""

Первый вариант подойдёт в любом случае.

Хотите сказать что если сделать переменную пустой, то она не будет грузить оперативку?
Для меня это странно т.к. в C++ int a; (определение пустой переменной типа int) выделяет память, т.е. переменная пустая, а память то выделана пот переменную.

4 (изменено: teadrinker, 2015-07-22 16:52:48)

Re: AHK: Выгрузка переменной из памяти

Предыдущий пост цитировать не нужно.
Вы про вариант myVar := ""? Так в справке написано:

For performance reasons, the memory of a variable whose capacity is less than 4096 bytes is not freed by storing an empty string in it (e.g. Var := ""). However, VarSetCapacity(Var, 0) does free it.

Соответственно, можно сделать вывод, что если переменная больше 4096, вариант myVar := "" должен подойти. Если хотите быть уверенным на 100% — можете просто проэкспериментировать. Лично я для переменных, имеющих более или менее значительный объём, всегда пользуюсь первым вариантом. Если же в переменной всего несколько байт, то можно не заморачиваться.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5

Re: AHK: Выгрузка переменной из памяти

Вот, собственно:

MsgBox, Пустое сообщение для выделения памяти под него

PrevMemory := WorkingSetPrivate()
MsgBox, % "Память, занимаемая скриптом до выделеня памяти переменным: " PrevMemory " КБ"

VarSetCapacity(MyVar1, 262144, 123)  ; 256 КБ
VarSetCapacity(MyVar2, 262144, 123)  ; 256 КБ

CurrentMemory := WorkingSetPrivate()
MsgBox, % "Память, занимаемая скриптом после выделеня 512 КБ памяти переменным: " CurrentMemory " КБ`nРазница: " CurrentMemory - PrevMemory " КБ"
PrevMemory := CurrentMemory

VarSetCapacity(MyVar1, 0)
CurrentMemory := WorkingSetPrivate()
MsgBox, % "Память, занимаемая скриптом после освобождения первой переменной через VarSetCapacity(MyVar1, 0): " CurrentMemory " КБ`nРазница: " CurrentMemory - PrevMemory " КБ"
PrevMemory := CurrentMemory

MyVar2 := ""
CurrentMemory := WorkingSetPrivate()
MsgBox, % "Память, занимаемая скриптом после освобождения второй переменной путём сохранения в ней пустого значения: " CurrentMemory " КБ`nРазница: " CurrentMemory - PrevMemory " КБ"

WorkingSetPrivate()
{
   command := "Select * from Win32_PerfFormattedData_PerfProc_Process Where IDProcess=" DllCall("GetCurrentProcessId")
   for process in ComObjGet("winmgmts:").ExecQuery(command)
      Return process.WorkingSetPrivate//1024
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

6

Re: AHK: Выгрузка переменной из памяти

Понял, спасибо большое.