用于存储来自/proc/<;的记录的结构;pid>/地图
我使用下一个结构来存储/proc//maps中的信息:用于存储来自/proc/<;的记录的结构;pid>/地图,c,linux,C,Linux,我使用下一个结构来存储/proc//maps中的信息: typedef结构 { 未签名的长vm_启动; 无符号长vm_端; 无符号长vm_标志; 无符号长vm_pgoff; 开发虚拟机开发; 无符号长vm_ino; 无符号长vm_大小; 国际货币基金组织股份; }地图; 和一个向量: 当我从文件中读取记录时,我发现一个共享的等效区域: int mem\u mapping\u find\u shared(map\u vector\u t*vector,map\u t map) { int指数
typedef结构
{
未签名的长vm_启动;
无符号长vm_端;
无符号长vm_标志;
无符号长vm_pgoff;
开发虚拟机开发;
无符号长vm_ino;
无符号长vm_大小;
国际货币基金组织股份;
}地图;
和一个向量:
当我从文件中读取记录时,我发现一个共享的等效区域:
int mem\u mapping\u find\u shared(map\u vector\u t*vector,map\u t map)
{
int指数=-1;
对于(int i=0;index=-1&&isize;i++){
if(mem_映射可共享(vector->arr[i],map)){
指数=i;
}
}
收益指数;
}
但是它的代码太慢了。我想我应该使用哈希表,对吗?我可以使用哪个散列函数?也许它对某些人有用:
我的程序在测试中的工作时间超过3秒,但我知道有人有一个程序只能工作1.2秒。mem_mapping的定义是什么?根据这一点,二叉树可能是比哈希表更好的选择。此外,按值传递
map\t
s似乎花费了不必要的成本。我制作了哈希表,现在它的工作时间不到1秒。如果你找到了问题的解决方案,你应该将其作为答案发布,而不是将其添加到问题中。
typedef struct
{
map_t *arr;
int size;
int reserved;
} map_vector_t;
int index = mem_mapping_find_shared(vector, map);
if (index != -1) {
vector->arr[index].vm_shares++;
continue;
}
map.vm_shares = 0;
unsigned long long mem_mapping_hash(const map_t *map)
{
unsigned long long h = map->vm_pgoff;
h = h * PRIME + map->vm_dev;
h = h * PRIME + map->vm_ino;
h = h * PRIME + map->vm_size;
return h % PRIME;
}