AllocPooled
-
Gofromiel disais:
C’est tellement bien tout ça, que ça me donne envie de sauter par la fenêtre rien que de penser à devoir utiliser le système d’EXEC !
Tu n’cherches pas à t’débarrasser d’moi par hasard ?
T’arriveras pas à m’décourager…
MemoryTest plante sans aucun message… il me fige la souris et le reste d’ailleurs…
J’suis sous 68k 3.9 B2 avec un 68060 et une PIV et un bon paquet de mémoire…
Mais j’avais déjà eu le problème… j’vais voir si je retrouve le truc qui va bien…
Parcontre si t’as des infos sur puddle et thresh, en attendant…
AllocVec* connait la taille allouée, donc il n’y a pas besoin de le repréciser lors de la libération, ce qui est bien plus pratique. Malheureusement sur os3.x, il n’y a pas d’AllocVecPooled/FreeVecPooled, mais juste AllocPooled/FreePooled, donc il faut que tu saches quelle taille fait un élément que tu libères.
Sinon, pour le puddle et tresh..
Si une allocation dépasse thresh, alors un nouveau puddle sera créé juste pour cette allocation. Dans le cas où c’est plus petit, ça s’alloue dans le puddle jusqu’à ce qu’il soit complet. Quand il est complet un nouveau puddle est créé, et ainsi de suite.
(ou qqch comme ça
Bref, pour commencer, choisis juste un threshold avec la taille moyenne maximale d’une allocation, et un puddle de la taille de plusieurs de ces allocations (ce nombre dépend pas mal de ce que fait ton programme).
Quand les valeurs sont bien choisies ça évite de fragmenter inutilement.
Super ta réponse… j’commence à cerner le truc…
Merci
Ces valeurs données à puddle et thresh ne servent pas lors de mes AllocPooled… ce sont juste des données d’évaluation grossière de la taille des mes futures alloc et de l’espace mémoire dont j’aurai besoin…
J’ai bon ?
Si je veux que l’espace alloué au début soit minimum et qu’il ne grandisse qu’au fur et à mesure de l’utilisation… Un peu comme dans une base de données, où l’on démarre avec rien et qu’après une session, on arrête avec rien ou plusieurs enregistrements… Donc pas la peine de creer une grosse pool(*) ( ) si pas nécessaire…
Est-ce que l’utilisation d’une pool est préférable dans ce cas ?
Si oui, puis-je créer une pool avec un puddle minimum et un thresh=puddle, et laisser la pool grandir au fur et à mesure des besoins…
ou ne vaut-il pas mieux que j’utilise AllocMem ou autre AllocVec ?
(*)Toutes les pools citées ici sont exemptes de grippe aviaire.
There’s actually a fourth method: ItemPools. If you have a specific memory requirement (i.e. you allocate a lot of similar-sized structures), the item pool is by far the best method of allocating memory, since it has an amortized constant time overhead for allocations, while keeping fragmentation to a minimum.
Plus, they can be automatically protected by semaphores,
Dommage que tu ne puisses proposer une traduction, car moi l’anglais ça me rebute méchamment… Mais je pense avoir saisi l’essentiel… pool = rapidité et fragmentation mini
…they can be automatically protected by semaphores…
C’est pas tout à fait automatique…
Et comme le rappelait Gôfralanutella, la sémaphore sous EXEC oblige à plus que de simples mouvements des bras…
Ah oui c’est sûr. J’avais pas vu la précision « sur 3.9 ».
Les sémaphores exec n’exigent pas vraiment plus d’efforts.
En fait, l’api proposée par feelin pour les sémaphores de pools semble adaptée 1:1 avec l’api amigaos. Juste le nom change, pour rester homogène avec le reste de l’api.
Je vois pas bien l’innovation dans le fait de créer une api qui fait la même chose que l’original.
Source de Fellin :
F_LIB_OPOOL
{ if (Pool) { ObtainSemaphore(&Pool->Semaphore); } }
F_LIB_SPOOL
{ if (Pool) { ObtainSemaphoreShared(&Pool->Semaphore); } }
F_LIB_RPOOL
{ if (Pool) { ReleaseSemaphore(&Pool->Semaphore); } }
Bref, juste un autre nom pour les fonctions d’exec…
En quoi cela donne t-il moins « envie de sauter par la fenêtre » ?
Gofro, fais gaffe aux chevilles là…
Pour moi cela reste abscons à souhait ces trucs-là…
Entre les sémaphores-signaux et les sémapatrophores…euh les ports de sémaphores avec tous les trucs qu’il y a autour… en plus avec de l’anglais… Il va falloir vraiment que j’en aie besoin pour que je m’y risque…
En tout cas, merci les gars pour ces éclaircissements.
PS: pour Gôfromiel
MemoryTest plante chez moi après affichage du titre et du premier printf qui suit…
Et je n’arrive pas à recompiler avec vbcc, trop d’erreurs…
Je vois pas bien l’innovation dans le fait de créer une api qui fait la même chose que l’original.
Coquin va ! C’est pas fait pour être original, c’est fait pour être pratique ! Puisque le sémaphore est inclu directement dans la piscine c’est beaucoup plus simple de la « bloquer », sans avoir besoin de garder la trace d’un second pointeur pour le semaphore d’arbitrage.
Sinon, d’un life-style général (puisqu’on me critique !):
– J’essai de faire aussi bien;
– Je simplifie et j’ergonomise: seulement deux fonctions pour allouer de la mémoire, et une UNIQUE pour la libérer avec UNIQUEMENT le pointeur du bloc.
– Ensuite je dépasse la référence en boostant capacités, fonctionnalités, sécurité et options.
– Je fais tout ça pour vos beau yeux
– Je me fais crâcher dessus par des gens qui ont des avatards tout môches.
– Je continue de plus belle
@Henes: T’es quand même un petit con ! Pourquoi tu fais pas un copier coller des 1060 autres lignes du code de gestion mémoire ? Perdu de vu la touche copier/coller après cet infâme post ?Ne t’en déplaise le système mémoire de Feelin est très bien et reste bien au délà de ce que propose les autres implémentations sur Amiga en therme d’efficacité, de sécurité et surtout d’options.
Je trouvais ton post « con » mais en fait il est juste gratuitement méchant.
En tout cas, merci les gars pour ces éclaircissements.
De rien, j’espère que tu vas t’en sortir. C’est pas compliqué et c’est pratique ! En tout cas damned MemoryTest ! Il faudrait que je vois ça avec mon Hombre… pourtant ça marchait rûdement bien sur son AOne… la vie
Je me suis contenté de copier coller les lignes qui sont censées être tellement mieux que le système d’exec.
Est ce de ma faute si tes fameuses fonctions de pool sont en fait celles d’exec que tu décries tant ?
Est ce de ma faute si tu racontes n’importe quoi pour te faire mousser ?
Garde tes insultes. Tu n’es pas le premier à ne pas supporter qu’on lui prouve sa propre connerie.
Décevant.
J’hallucine !! T’es vraiment méchant en fait !! Je pensais que c’était ironique mais on dirait que non…
Je me fais mousser ?? Et alors ? Je me casse le cul sur un système objet merveilleux pour faisir plaisir aux gens et à notre petite caumunauté et je me fais poignarder sans humour !!
Pfff, y a des fois comme ça ou ça me rend tristoune. Heureusement que je vais passer une grosse nuit de sexe pour faire passer tout ça
Garde tes insultes
Petit con c’est affecteux par chez-moi (Toulouse) Par contre j’ai trouvé ça méchant. La fatigue a peut-être entamée mon esprit de dérision.
Tu n’es pas le premier à ne pas supporter qu’on lui prouve sa propre connerie
DES NOMS !! merci pour ma propre connerie au passage.
Décevant
Oui, moi aussi je suis déçu ! La politique c’est la merde, l’amour c’est la merde, les drogues c’est la merde. Heureusement à 28ans j’ai toujours le ventre plats et j’ai plein de rapports protégés
Si tu appelles cela être méchant et que cela mérite des insultes, tu as un problème…
Evite juste de dire « XYZ est pourri !!!!!!!!!!!!!! mon truc ABCD est mille fois mieux !!! » lorsque ABCD se contente d’être XYZ déguisé… (je parle juste des pools mais tu l’avais compris)
Et alors tu verra que personne ne viendra t’ennuyer.
M’enfin pourquoi tu me trashes pour des conneries de sémaphores ?? C’est tout ce qui a attiré ton attention dans mon système mémoire ?
Si tu appelles cela être méchant et que cela mérite des insultes
Vous-y allez fort jeune homme ! Parler d’insulte en ce point.
Je viens d’ailleurs de remarquer que tu m’as appelé « Gofro »… sympathie déguisée malgrès tout ?
- Vous devez être connecté pour répondre à ce sujet.
› Forums › AmigaOS, MorphOS et AROS › Développement › AllocPooled