Самая большая утечка памяти - это открытые модули, которые больше не используются. Поэтому, конечно, вы должны закрыть их.
Далее вы хотите свести производство новых строк к минимуму, так как каждый новый создает запись в таблице строк. Вы можете найти отличную диссертацию по этому вопросу от Mathias Mamsch здесь: https://www.ibm.com/developerworks/community/forums/html/topic?id=77777777-0000-0000-0000-000014886977&ps=25
Наконец, типы данных, которые имеют методы создания/удаления, могут потреблять память, если они не удаляются. Чтобы найти неизданные экземпляры, я использую некоторые функции памяти, созданные Mathias Mamsch. Ссылка я должен вернуться на свой пост уже не работает, но вот те функции, которые я использую:
//< Memory Functions [Memory.inc]
/*
Code adapted from forum post by Mathias Mamsch:
https://www.ibm.com/developerworks/community/forums/html/topic?id=77777777-0000-0000-0000-000014830975
*/
int *::+(int *ptr, int ofs)
{
int *rtn = ptr
rtn += ofs
return(rtn)
}
int *::@(int *ptr, int ofs)
{
int adr = *(ptr + ofs)
int *rtn = addr_(adr)
return(rtn)
}
int *mbn(int *ptr)
{
return(ptr @ 0x74)
}
int *nnn(int *ptr)
{
return(ptr @ 8)
}
int *ccp()
{
DB db = create("")
int *ptr = addr_(db)
int *rtn = ptr @ 48
destroy(db)
return(rtn)
}
int allocatedObjects()
{
int cnt = 0
int *mb = mbn(ccp())
while(!null mb) { mb = nnn(mb) ; cnt++ }
return(cnt)
}
Я уверен, что я изменил функцию и имена переменных из оригинала размещен код, так что будьте в курсе что если вы когда-нибудь столкнетесь с его оригинальным кодом. И не спрашивайте меня о жестко закодированных номерах ... Матиас объяснил их на этом посту, и я не помню объяснения.
Вот как вы будете использовать код:
//< Test of Memory.inc
/*
*/
pragma encoding, "UTF-8"
#include <stdlib/Memory.inc>
pragma runLim, 0
int numallobj = allocatedObjects()
print numallobj "\n"
Skip skp = null Skip
numallobj = allocatedObjects()
print numallobj "\n"
skp = create()
numallobj = allocatedObjects()
print numallobj "\n"
delete(skp)
numallobj = allocatedObjects()
print numallobj "\n"
/*
Output should be:
0
0
1
0
*/