利用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 ...