2010-10-19 11 views
2

Je travaille sur un système embarqué existant (la mémoire est limitée, Flash est limité, ...) avec un système d'exploitation RT. Toutes les structures de données ont une taille fixe et sont allouées à la "compilation" et sont donc adaptées à RT. Il n'y a pas d'allocation de mémoire dynamique . Le langage de programmation est C++, mais il n'y a pas de STL disponible. I tiens à remplacer certaines des structures de données en particulier LinkedList, Vector et Carte avec quelques variantes plus génériques.structures de données allouées statiques

Le plus proche que j'ai vu jusqu'à présent est le cadre suivant: http://apfw.sourceforge.net/. Le plus grand inconvénient IMHO est que pour une LinkedList avec la taille N, le constructeur par défaut de T est appelé N fois. Une classe mieux devrait allouer statiquement sizeof (T) * N octets.

Est-ce que quelqu'un sait que je bibliothèque avec toutes les contraintes ci-dessus?

+0

Il attribue très probablement le stockage de manière statique dans l'image. Mais C++ exige que les cteurs soient appelés. Sinon, comment voudriez-vous initialiser les instances T? – wilx

+0

Si ce framework supporte les allocateurs personnalisés, vous pouvez essayer d'écrire votre propre allocateur. – sellibitze

+0

@sellibitze. Les allocateurs personnalisés ne sont pas pris en charge. – azraiyl

Répondre

1

Avez-vous envisagé de transmettre votre propre allocateur (allocation à partir d'un pool statique) aux conteneurs STL?

À part ça, je ne pense pas que quelque chose comme ça existe. Vous voudrez peut-être regarder this related question pour commencer avec une classe de vecteur statique. Si vous faites cela, pensez à le faire Open Source.

+0

Actuellement, la cible n'a pas de STL. S'il y avait assez de Flash disponible (le lien de téléchargement est une ligne série avec environ 2 KiBytes/s, donc même si j'ajoute plus de Flash j'ai un problème) je suppose que le STL avec un O (1) allocateur de mémoire : //rtportal.upv.es/rtmalloc/) serait ok. Je dois admettre que je n'ai jamais essayé de couper le STL en petits morceaux. – azraiyl

1

Si vous corrigez la taille de la LinkedList, pourquoi ne pas simplement créer votre propre classe et la sauvegarder par un tableau?

+0

Parce qu'il y a peut-être 10% des méthodes nécessaires, comparé ce que le STL fournit, ce serait faisable. Je suppose que si personne ne connaît déjà une bibliothèque, je vais écrire ma propre classe, la poster ici, et laisser les experts décider, ce que je ..... – azraiyl

1

Je vous recommande ce qui suit:

http://www.codeproject.com/KB/recipes/Containers.aspx

C'est un article que j'ai écrit au sujet anoter conception des classes de conteneurs. L'un des plus grands avantages d'entre eux est que en allouant les données et en stockant il dans le récipient sont séparés.

Vous pouvez par exemple déclarer vos données statiques au moment de la compilation, puis les insérer/les retirer de la liste/arborescence/etc.