9
votes

Mise en œuvre de carte très simple en C (pour but de coaching)?

J'ai un programme qui loit des URL dans un fichier et fait un gethostbyname () sur chaque hôte URL. Cet appel est tout à fait consommer. Je veux les mettre en cache.

Y a-t-il un extrait de code de base de la carte très simple en C et que je puisse utiliser pour faire la mise en cache? (Je ne veux tout simplement pas réinventer la roue).

Il doit avoir les points suivants:

  • open-source avec une licence permissif (pensez BSD ou domaine public).
  • très simple: idéalement moins de 100 loc
  • Les touches sont char * et valeurs void * . Pas besoin de les copier.
  • Pas de besoin réel d'implémenter Supprimer () , mais contient () est nécessaire ou mettre () doit remplacer la valeur. < / li>

    PS: Je l'ai marqué devoirs , car cela pourrait être. Je suis juste très paresseux et que vous voulez éviter tous les pièges communs que je pourrais rencontrer lors de la réimplément.


1 commentaires

@Sinan & Meredith: J'ai accepté le code snipped car il était exactement Qu'est-ce que je cherchais.


8 Réponses :


1
votes

Memcached ?

pas un extrait de code, mais un moteur de mise en cache distribué de haute performance.


1 commentaires

-1: Je veux éviter un syscall ( gethostbyname () ), donc je ne pense pas vraiment que Memcached correspond à la facture ici.



1
votes

Non paresseux, profondément sensible à éviter d'écrire ce genre de choses.

Comment se passe-t-il bibliothèque ne l'utilise jamais moi-même mais il semble de prétendre faire quoi Vous demandez.


2 commentaires

La bibliothèque semble intéressante, mais la dernière mise à jour du site Web était de 2005. Tout irait pour quelques lignes de code, mais un peu trop vieux pour une bibliothèque époustouflée.


Eh bien, des algorithmes fondamentaux bien mis en œuvre ne devraient pas être datés. Je n'aurais aucune inquiétude à utiliser des bibliothèques de ce type de 4 ans - en supposant qu'ils travaillaient en premier lieu. Si vous avez le code, la maintenance ne devrait pas être trop de problème.



5
votes

Christoper Clark's La mise en œuvre de Hashtable est très simple. Il fait plus de 100 lignes, mais pas par beaucoup.

Le code de Clark semble avoir fait son chemin dans Bibliothèque de la Concurrence de Google comme exemple de parallélisation.


2 commentaires

Le lien dans cette réponse uniquement sur la liaison est mort.


@Vaultah a pointé le lien vers archive.org . Merci pour l'information.



4
votes

std :: map en C ++ est un arbre noir noir sous la hotte; Qu'en est-il d'utiliser une implémentation existante de l'arbre rouge-noir en C ? Celui que j'ai lié est plus comme 700 loc, mais c'est assez bien commenté et semble sain d'esprit du gain de curseur que j'ai pris à elle. Vous pouvez probablement trouver les autres; Celui-ci a été le premier coup sur Google pour "C Rouge-Black Tree".

Si vous n'êtes pas difficile sur la performance, vous pouvez également utiliser un arbre binaire déséquilibré ou un tas de telle minute ou quelque chose comme ça. Avec un arbre binaire équilibré, vous êtes garanti o (log n) recherche; avec un arbre déséquilibré, le pire cas de recherche est O (n) (pour le cas pathologique où les nœuds sont insérés dans l'ordre, vous vous retrouvez ainsi avec une branche vraiment longue qui agit comme une liste liée), mais (si mon rouille la mémoire est correcte) L'étui moyen est toujours (log n).


0 commentaires

0
votes

a trouvé une implémentation ici: C Fichier et H fichier assez proche de ce que vous avez demandé . Licence W3C


0 commentaires

8
votes

Voici une très simple et naïve

  • Taille du godet fixe
  • Aucune opération de suppression
  • inserts remplace la clé et la valeur, et peut éventuellement leur libérer

    : xxx


1 commentaires

+1: exactement ce que je cherchais. J'ai édité le code un peu pour faire face à une const-ness correcte (clé et valeur). Maintenant, mes applications commencent en moins d'une seconde, au lieu des 2 minutes @ 100% CPU :-)



1
votes

Dave Hanson's C interfaces et implémentations comprend une belle table de hachage, ainsi que autant d'autres modules utiles. Les horloges de la table de hachage dans 150 lignes, mais c'est une gestion de la mémoire, une fonction de mappage d'ordre supérieur et une conversion en tableau. Le logiciel est gratuit et le livre vaut la peine d'acheter.


0 commentaires

2
votes

Vous pouvez essayer d'utiliser l'implactation suivante

clib


1 commentaires

Merci, c'est toujours du travail en cours. Dans l'espoir de finir dans 2 autres semaines.