2015-06-03 58 views

回答

1

最大的內存「泄漏」將是不再使用的開放模塊。所以當然你應該關閉這些。

接下來,由於每個新字符串都會在字符串表中創建一個條目,所以您希望將新字符串的生成保持在最低水平。 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 
*/