C-程序:使用链接列表数组的哈希表的内存溢出

时间:2012-05-02 14:55:48

标签: c linked-list hashtable

系统有16GB RAM。我们用于存储在哈希表的链表中的节点结构的大小为38字节。这告诉我们可以在哈希表中存储多达4.52亿个节点。但只有在1300万个节点(大约)之后才会发生内存溢出。

相关的代码段是:

for (i=0;i<NO_OF_BUCKETS;i++)
  {  
    nextptr = hashtable[i];
    while (nextptr != NULL)
      {
        prevptr = nextptr;
        nextptr = nextptr->next;
        free(prevptr);
      }
    hashtable[i] = NULL;
  }

1 个答案:

答案 0 :(得分:1)

System has 16GB RAM. Our node structure for storing in the linked list of the hash table has a size of 38bytes. This tells that we can store up to 452million nodes in the hash table.

现在这是一个错误的假设。您是否认为所有RAM都将保留用于您应用程序中的数据?一点也不。有操作系统,其他用户空间应用程序等也需要内存,你甚至无法确切地知道他们需要多少。因此,不要指望您可以计算链表实现中的元素数量。