記憶體開銷記錄模組

2021-09-02 19:54:17 字數 3757 閱讀 6559

利用hash表來記錄 在程式中malloc和free記憶體的情況

memorymanage.h

#ifndef _memorymanage_h_

#define _memorymanage_h_

#include #include #include #define max_node_num (15)

#define file_name_str (120)

#define hash_key_str (32)

#define debug_printf(fmt,...) printf("debug: [file:%s line:%d] "fmt,__file__,__line__,##__va_args__)

#define error_printf(fmt,...) printf("error: [file:%s line:%d] "fmt,__file__,__line__,##__va_args__)

extern void* hashtable_malloc(size_t p_psize, char *p_pfile, int p_nline, char *p_pfun);

extern void hashtable_free(void* p_pmemoryadress);

#define malloc(size) hashtable_malloc(size, __file__, __line__, __funcdname__)

#define free(p) hashtable_free(p)

typedef struct hash_node_t

hash_node;

extern int hashtable_init( );

extern void hashtable_printf( );

#endif

memorymanage.cpp

#include #include #include #include #include "memorymanage.h"

#define sn_success (0)

#define sn_error (-1)

static hash_node *objallhashnode[max_node_num] = ;

int hashtable_init( )

memset(objallhashnode[i], 0, sizeof(hash_node));

} return sn_success;

}int hashtable_ch2int(char p_cch)

else if((p_cch >= 'a') && (p_cch <= 'f'))

return 0;

}unsigned int hashtable_str2hashval(const char* p_pstr)

return nhash%max_node_num;

} /*計算key值*/

int hashtable_get_key(hash_node *p_pobjnodeinfo)

char szstr[hash_key_str] = ;

_snprintf(szstr, hash_key_str, "%p", p_pobjnodeinfo->m_pmemoryaddress);

int nstrlen = strlen(szstr);

return hashtable_str2hashval(szstr);

}/*插入*/

int hashtable_insert(hash_node *p_pobjnodeinfo)

hash_node *objnode = null;

hash_node *objnewnode = null;

int nkey = hashtable_get_key(p_pobjnodeinfo);

if(nkey <= sn_error)

if(nkey <= max_node_num)

/*把資料放入鍊錶尾部*/

/*申請空間接入到尾部*/

objnewnode = (hash_node *)malloc(sizeof(hash_node));

if(!objnewnode)

memset(objnewnode, 0, sizeof(hash_node));

objnode->m_pobjnextnode = objnewnode;

objnode = objnode->m_pobjnextnode;

} objnode->m_nkey = nkey;

objnode->m_nmemorysize = p_pobjnodeinfo->m_nmemorysize;

objnode->m_pmemoryaddress = p_pobjnodeinfo->m_pmemoryaddress;

memcpy(objnode->m_szfilename, p_pobjnodeinfo->m_szfilename, strlen(p_pobjnodeinfo->m_szfilename));

debug_printf("hashtable_insert success !!!\n");

} else

return sn_success;

}/*刪除*/

int hashtable_delete(hash_node *p_pobjnodeinfo)

if(!p_pobjnodeinfo->m_pmemoryaddress)

int nkey = hashtable_get_key(p_pobjnodeinfo);

if(nkey <= sn_error)

objnode = objallhashnode[nkey];

if(!objnode)

/*匹配節點*/

while(objnode->m_pobjnextnode != null)

objnode = objnode->m_pobjnextnode; }

return sn_success;

}void* hashtable_malloc(size_t p_psize, char *p_pfile, int p_nline, char *p_pfun)

void hashtable_free(void* p_pmemoryadress)

memset(&objhashnode, 0, sizeof(hash_node));

objhashnode.m_pmemoryaddress = p_pmemoryadress;

hashtable_delete(&objhashnode);

return free(p_pmemoryadress);

}/*列印當前記憶體情況*/

void hashtable_printf( )

} }}

main.cpp

#include #include #include #include "memorymanage.h"

int main( );

hashtable_init();

for(int i = 0; i < 10; ++i)

hashtable_printf();

for(int i = 0; i < 10; ++i)

hashtable_printf();

return 0;

}

pytorch學習總結 運算的記憶體開銷

前 面說了 索引 view 是不 會開闢新記憶體的,而像 y x y 這樣的運算是會新開記憶體的,然後 將 y 指向新記憶體。為了 演示這 一點,我們可以使 用python 自帶的 id 函式 如果兩個例項 的id 一致,那 麼它們所對應的記憶體位址相同 反之則不 同。x torch.tensor ...

ADO防止記憶體洩露和減少記憶體開銷的方法

boqing 自己琢磨的,如果您發現不當之處,望不吝賜教 1 createinstance 後不要忘記release 2 open後不要忘記close 3 盡量保證資料管理類只有乙個例項。一 建立乙個資料管理類cdatamange,本類只能建立乙個例項,具體方法 l 建立成員變數,私有,靜態 pri...

談OSSIM伺服器記憶體開銷問題

談ossim伺服器記憶體開銷問題 ossim經歷十多年發展,目前已經成為最優秀的開源安全事件資訊管理平台,它在我國的應用才剛剛起步。多年前,在國外考查時我意外發現了這款優秀的軟體系統,並不斷改進之後開始在國內開始推廣應用ossim,在我撰寫的 unix linux網路日誌與流量監控 一書中花費30 ...