在linux内核中经常会看到这几个结构体:structlist_head;structhlist_head;structhlist_node;在linux内核源代码中对这三个结构体的定义如下:structlist_head{structlist_head*prev;structlist_head*next;}structhlist_node{structhlist_node**prev;structhlist_node*next;}str..
分类:
系统相关 时间:
2014-10-17 12:12:41
阅读次数:
314
list
----------------------------------------------------------------------
??为什么很多在算法库里有的算法还要在类的成员函数里重新实现一遍?
-->1.因为算法库里的是通用的,对于具体的类来说效率不高。
比如说 reverse 如果直接用 stl_algo.h 里的 reverse,会再调用 iter_swap,
而 iter_swap 的实现方法是借用临时变量来交换两个迭代器指向的元素,这样会调用
好几次构造函数、拷贝方法、析构...
分类:
其他好文 时间:
2014-07-22 00:27:35
阅读次数:
357
比如在插入有序链表的过程中,一般情况下要使用俩指针来遍历,而后还要判断是否在第一个位置插入;利用指针的指针后不需要另外考虑这种特殊情况。
代码:
#include
#include
struct node{
int data;
struct node *next;
} *head;
//sorted link-list
void insert(struct no...
分类:
其他好文 时间:
2014-07-13 15:38:13
阅读次数:
198
OVS中流表操作的理解关键在于这里哈希表的实现,引入的 flex_array方便了内存的管理,通过 hash&(桶数-1)可以随机的将一个元素定位到某一个桶中。
接下来是代码细节。
一. 核心数据结构
//流表
struct flow_table
{
struct flex_array
* buckets; //具体的流表项
unsigned...
分类:
其他好文 时间:
2014-07-01 11:09:12
阅读次数:
638
在内核编程中哈希链表hlist使用非常多,比如在openvswitch中流表的存储中就使用了(见[1])。hlist的表头仅有一个指向首节点的指针,而没有指向尾节点的指针,这样在有很多个buckets的HASH表中存储的表头就能减少一半的空间消耗。
和hlist相关的数据结构如下,桶中存储的 hlist_head 是具有相同hash值的entry构成的链表,每个entry包含一个 hl...
分类:
系统相关 时间:
2014-07-01 09:05:52
阅读次数:
880
_hashMap.insert(pair<String,HASH_TABLE*>(tmp,hashtabletmp));这句会报segment或abort错误经同事帮看,也翻来覆去自查,终于发现原来是malloc中hTable->hList=(pHASH_ENTRY)malloc(hTable->listLen*(HASH_ENTRY_SIZE));这句写成了hTable->hList=(pHASH_ENTRY)..
分类:
其他好文 时间:
2014-05-20 20:20:34
阅读次数:
288
在Linux内核中,hlist(哈希链表)使用非常广泛。本文将对其数据结构和核心函数进行分析。
和hlist相关的数据结构有两个:hlist_head 和 hlist_node
//hash桶的头结点
struct hlist_head {
struct hlist_node *first;//指向每一个hash桶的第一个结点的指针
};
//hash桶的普通结点
struct hl...
分类:
系统相关 时间:
2014-04-27 21:24:06
阅读次数:
579