即使在您遇到嚴重問題之前,查明您的腳本是否存在嚴重的內存泄漏也許會引起您的興趣。不幸的是,我無法確定如何測量當前堆棧/堆大小或「字符串表」大小(請參閱http://www.smartdxl.com/content/?p=481)。任何人都可以幫忙嗎?如何測量DXL腳本的內存消耗?
相關問題:Predicting DXL Memory and CPU Usage
即使在您遇到嚴重問題之前,查明您的腳本是否存在嚴重的內存泄漏也許會引起您的興趣。不幸的是,我無法確定如何測量當前堆棧/堆大小或「字符串表」大小(請參閱http://www.smartdxl.com/content/?p=481)。任何人都可以幫忙嗎?如何測量DXL腳本的內存消耗?
相關問題:Predicting DXL Memory and CPU Usage
最大的內存「泄漏」將是不再使用的開放模塊。所以當然你應該關閉這些。
接下來,由於每個新字符串都會在字符串表中創建一個條目,所以您希望將新字符串的生成保持在最低水平。 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)
}
我敢肯定,我改變張貼代碼的功能,並從原來的變量名,所以要注意的如果你遇到過他的原始代碼。不要問我關於硬編碼的數字...... Mathias在帖子中解釋他們,我不記得這個解釋。
這裏是你將如何使用代碼:
//< 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
*/
我找到了問題的「字符串表」部分的解決方案。 Mathias Mamsch在https://www.ibm.com/developerworks/community/forums/html/topic?id=77777777-0000-0000-0000-000014886977提供了一個文件「stringTable.inc」,它定義了函數printStringTable()
。顯然,它輸出關於表大小的信息,並且可以很容易地進行修補以提供字符串表bytesize的近似值。