Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于存储来自/proc/<;的记录的结构;pid>/地图_C_Linux - Fatal编程技术网

用于存储来自/proc/<;的记录的结构;pid>/地图

用于存储来自/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指数

我使用下一个结构来存储/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指数=-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;
}