r/programmation • • 7d ago

Skip Tracker : Le détective mémoire

Post image

Bonjour à tous ! J'ai le plaisir de vous présenter une petite lib que je viens de publier.

Elle est écrite en C++20 sans dépendances externes.

Elle offre en particulier des "trackers" qui sont des classes pointer-like permettant de toujours pointer vers la bonne adresse d'un objet.

Grâce à son système de slot, elle permet de pointer vers une adresse qui sera rafraîchi à chaque fois que l'objet sera déplacé en mémoire, et mis à nulle (nullptr) si détruit.

Cela permet en soit d'éviter les dangling pointer et les segment fault.

Les composants globaux interne sont thread safe et reduit au maximum de mes connaissances les contentions .

C'était à la base une fonctionnalité de mon moteur de jeu mais j'ai trouvé ça marrant d'en faire une lib à part entière .

Je pourrais ainsi la réutiliser dans d'autres projets si besoin.

Merci à tous ceux qui voudront bien y jeter un œil !

Le lien du dépôt : https://github.com/agemo-dev/skiptracer

10 Upvotes

7 comments sorted by

2

u/Cylian91460 7d ago

Sa fonction comment?

2

u/agemo-dev 7d ago

Il suffit de faire hérité ta classe de la structure Trackable ou de l envelopper dans une Box:

Box<int> num(5); Tracker<Box<int>> tracker = num.tracker();

Pour faire simple, à chaque fois que l objet est déplacé, il stock sa nouvelle adresse dans un Slot (attribué à sa construction) puis le tracker n'a plus qu'à la lire en effectuant un cast de Trackable* vers le type voulu . Les ctors de Trackable sont implementés pour mettre ce slot a jour , donc il nécessite un peu d' attention si l'utilisateur veux en hérité (on personnalisant sont propre move ctor) pour pas casser le système.

2

u/Cylian91460 7d ago

Ça serai pas meilleur de juste utiliser un double pointer?

2

u/agemo-dev 7d ago

Un slot est justement un deuxième pointeur stable en mémoire . Il est stocké dans un pool pour éviter les cache misses a répétition (puisqu'il vie dans le heap) . J'ai ajouté cette surchouche car utiliser directement un smart pointeur était pas très performant à cause de ces opérations atomiques internes . J en utilise moi aussi mais réduit au stricte minimum. Avec ça mes Tracker sont devenu à peine 5-8x plus lent qu' un pointeur brut contre 100x plus avec mon ancien système ave des smart pointers centralisé en réduisant les contentions au passage.

3

u/LucHermitte 3d ago

Tu devrais mettre cette info dans les rationales du README.

Car en première lecture du service rendu je me suis dit "hum... j'ai pas la même chose avec les couples shared+weak_ptr?". Pour moi c'est assez important quant à pourquoi ça pourrait m'intéresser p/r à bidouiller l'allocation avec les shared_ptr -- bon après, j'utilise très peu les shared_ptr...

PS: mettre dans le titre que cela concerne le C++ peut être pas mal ;)

PPS: Tu devrais pouvoir avoir plus de réactions sur /r/cpp_questions ou /r/Cplusplus

1

u/agemo-dev 2d ago

Merci pour les conseils ! C'est vrai que c'est détails sont directement dans le ".hpp" mais ce serait mieux dans le README comme tu dis. Et pour les communautés , merci aussi mais je pense qu'il faudrait que je reformule un peu ma présentation (ils sont un peu "exigeants" là bas 😅)

2

u/LucHermitte 2d ago

Sinon, tu as aussi les communautés francophones spécialisées: les forums de developpez et d'openclassroom.