Gestion de la mémoire – quelques liens
Vous trouverez ci-dessous quelques liens pertinents quant à la gestion
de la mémoire.
Thématiques générales
Référence généraliste sur le sujet :
http://www.memorymanagement.org/
Description d'approches spécialisées mises en application chez
Facebook : http://www.facebook.com/notes/facebook-engineering/scalable-memory-allocation-using-jemalloc/480222803919
Un modèle théorique d'abstraction de l'allocation de la mémoire :
http://research.microsoft.com/apps/pubs/default.aspx?id=67821
Ce que tout programmeur devrait savoir sur la mémoire, par Ulrich Drepper
en 2007 : http://lwn.net/Articles/250967/
ou, en format PDF,
http://www.akkadia.org/drepper/cpumemory.pdf
Être Memory-Safe :
L'allocation de la mémoire sous Linux :
Gestion de la mémoire sous
Microsoft Windows :
Gestion de la mémoire en langage
C :
- À propos de la vénérable fonction
malloc(), du langage
C :
- texte de Poul-Henning Kamp, proposant une étude critique de cette
fonction : http://phk.freebsd.dk/pubs/malloc.pdf
- discussion de la gestion de la fragmentation de la mémoire :
http://t-t-travails.blogspot.com/2009/05/mr-malloc-gets-schooled.html
- parfois, la question de la quantité de swap space disponible
redevient importante :
http://blogs.nologin.es/slopez/archives/28-Sometimes,-swap-space-still-matters.html
- sous Linux,
malloc() n'échoue essentiellement jamais, du moins pas pour
les raisons que l'on pourrait supposer au préalable. Une explication
d'Alexandru Scvorţov en 2012 :
http://www.scvalex.net/posts/6/
- combien de bytes sont réellement alloués lors d'un appel à
malloc(0), et pourquoi?
- en 2013, Julia Evans fait le constat que
programmer un noyau de
système d'exploitation signifie
programmer sans malloc(), ce mécanisme n'était pas
disponible a priori :
http://jvns.ca/blog/2013/12/03/day-36-programming-without-malloc/
- la version de malloc() implémentée par
glibc, texte de 2015 :
https://sploitfun.wordpress.com/2015/02/10/understanding-glibc-malloc/
- implémenter une version « maison » de malloc(),
texte de 2015 par Dmitry Geurkov :
http://troydm.github.io/blog/2015/08/03/lifting-shadows-off-a-memory-allocation/
- en 2015, Xian Wei nous rappelle qu'il se peut
que malloc() ne se comporte pas comme vous le
croyez : http://iarchsys.com/?p=764
- À propos de realloc() :
- Ce que toute programmeuse et tout programmeur
C devrait savoir sur
la mémoire, selon Marek Vavrusa en 2015 :
http://marek.vavrusa.com/c/memory/2015/02/20/memory/
- Comment initialiser une structures de données allouée dynamiquement en
langage
C, une approche
proposée par Leandro Pereira en 2015 :
http://tia.mat.br/blog/html/2015/05/01/initializing_a_heap_allocated_structure_in_c.html
Spécifique à C++ :
- Survol de techniques de base quant à la gestion de la mémoire avec C++,
texte pour débutants par Kacper Kolodziej en 2015 :
https://kacperkolodziej.com/articles/programming/272-fighting-off-memory-leaks-and-errors-cpp11.html
- Technique
pour définir des pointeurs
intelligents à sémantique de partage tout en évitant
les irritants associés aux références cycliques, proposée
par Achilleas Margaritis : http://www.codeproject.com/KB/cpp/newcppmm.aspx
- Étude de Herb
Sutter sur la consommation de mémoire selon les conteneurs standards :
http://www.gotw.ca/publications/mill14.htm
- À propos des allocateurs :
#allocateur
- Gestion de la mémoire allouée dynamiquement dans les jeux
vidéos, une série de propositions par Jean-François Dubé
(d'Ubisoft Montréal) :
- Pour un survol de divers mécanismes de gestion de mémoire allouée dynamiquement avec
C++ 11, voir cet extrait d'un volume de Stanley B. Lippman, Josée LaJoie, Barbara E. Moo en 2012 :
http://www.informit.com/articles/article.aspx?p=1944072
- Services de gestion de la capacité d'un
std::vector :
- Le modèle par défaut d'allocation dynamique de mémoire est-il aussi
mauvais pour les petits objets que ne le prétend la littérature? En
2014, Evgeny Lazin affirme que bien que ça ait pu être le cas par le
passé, ce ne l'est plus aujourd'hui :
http://evgeny-lazin.blogspot.ru/2014/11/c-myths-debunking-part-1.html
- Ce texte d'Arne Mertz en 2015 rappelle qu'en C++,
il est généralement mal venu d'allouer dynamiquement des objets dont la portée
est locale à une fonction :
http://arne-mertz.de/2015/01/heap-allocation-of-local-variable/
- Organiser les données pour gagner en efficacité, textes de
2015 :
- En l'absence de collecte d'ordures, et
surtout du fait que les programmes ont directement accès aux adresses en
mémoire de leurs objets, les programmes
C++
qui ont recours à l'allocation dynamique de mémoire tendent à provoquer une
fragmentation de la mémoire. À ce sujet, texte de Tony Da Silva en
2015 :
http://bulldozer00.com/2015/06/01/holier-than-thou/
- Comprendre le new positionnel (Placement New), texte de Joe Ruether en
2015 :
http://jrruethe.github.io/blog/2015/08/23/placement-new/
Commun à C et à C++ :
Gestion de la mémoire avec
D :
Gestion de mémoire avec
Erlang :
Gestion de mémoire avec
JavaScript :
Spécifique à Objective-C :
Gestion de la mémoire sous
.NET,
autre que la collecte d'ordures :
Gestion de la mémoire avec
Rust :
Gérer la croissance des tampons dynamiques :
La gestion de la mémoire entraîne des coûts qui peuvent ne pas sembler
évidents de prime abord :
Gérer la mémoire à l'échelle d'un programme monstrueux comme Gmail, un texte
de John McCutchan et Loreena Lee en 2013 :
http://www.html5rocks.com/en/tutorials/memory/effectivemanagement/
Visualiser l'allocation dynamique de mémoire dans un programme de grande
envergure, par Rich Geldreich en 2015 :
http://richg42.blogspot.ca/2015/03/graphing-heap-memory-allocations.html
Qu'est-ce que le taux d'allocation d'un programme, et comment en tenir
compte, un article de teneur générale mais orienté vers la saine gestion de la
collecte d'ordures, par Nikita
Salnikov-Tarnovski en 2015 :
https://plumbr.eu/blog/garbage-collection/what-is-allocation-rate
En 2016, Scott Hanselman demande si l'on se
préoccupe encore de la gestion de la mémoire :
http://www.hanselman.com/blog/WhenDidWeStopCaringAboutMemoryManagement.aspx
À propos des fuites de mémoire
Un sujet qui s'applique à plusieurs langages, contrairement à
certaines croyances :
Sujet connexe : comment mesurer la consommation de mémoire dans un produit
tiers? Un texte de
Nicholas Nethercote en 2014 :
https://blog.mozilla.org/nnethercote/2014/07/07/measuring-memory-used-by-third-party-code/
Collecte automatique d'ordures (Garbage
Collection)
Plusieurs textes sur ce sujet très à la mode...
Idées d'ordre général
Pédagogie :
- Ensemble de ressources sur le sujet :
http://www.cs.kent.ac.uk/people/staff/rej/gc.html
- Explication générale du concept :
- Comptage de références :
- Survol de la collecte d'ordures dans les langages OO : http://www.osnews.com/story/6864/A-Glance-At-Garbage-Collection-In-Object-Oriented-Languages/page1/
- Collecte dite « générationnelle » : http://domino.research.ibm.com/comm/research_people.nsf/pages/dgrove.ecoop07.html/$FILE/ecoop2007-sv-preprint.pdf
- Le Leveled Garbage Collection, une forme de collecte d'ordures hiérarchiques
mais qui ne repose pas sur l'âge des objets : http://scholar.lib.vt.edu/ejournals/JFLP/jflp-mirror/articles/2001/A2001-05/JFLP-A2001-05.pdf
- Démystifier les moteurs de collecte d'ordures, texte d'Alex Rønne Peterson
en 2012 : http://xtzgzorex.wordpress.com/2012/10/11/demystifying-garbage-collectors/
- Enseigner la collecte d'ordures, texte de Gregory H. Cooper, Arjun Guha, Shriram Krishnamurthi, Jay McCarthy et Robert Bruce Findler en 2013 :
http://blog.brownplt.org/2013/02/19/teaching-gc.html
- Explication du fonctionnement d'un moteur de collecte d'ordures (celui de
Java), par Jonas Schwammberger en
2013 :
http://www.gamedev.net/page/resources/_/technical/general-programming/modern-garbage-collectors-under-the-hood-r2995
- Approches « positives » et « négatives » pour réaliser la collecte
d'ordures, une réflexion de Michael Robert Bernstein en 2013 :
http://michaelrbernste.in/2013/06/12/matter-anti-matter.html
- Étude de stratégies de collecte d'ordures à base de comptage de rééférences,
par Rifat Shahriyar, Stephen M. Blackburn et Daniel Frampton en 2012 :
http://users.cecs.anu.edu.au/~steveb/downloads/pdf/rc-ismm-2012.pdf
- En 2013, Robert Nystrom décrit ses premier pas
dans la conception d'un moteur de collecte d'ordures :
http://journal.stuffwithstuff.com/2013/12/08/babys-first-garbage-collector/
- Écrire un moteur de collecte d'ordures en langage
C, par Matthew
Plant :
http://web.engr.illinois.edu/~maplant2/gc.html
- Visualiser la collecte d'ordures, article de Ken Fox en
2014 :
http://spin.atomicobject.com/2014/09/03/visualizing-garbage-collection-algorithms/
- Quelques mythes à propos de la gestion de la mémoire sur plateforme Apple
(en pratique : une discussion des forces et faiblesses des moteurs de collecte
d'ordures), répertoriés par Jon Harrop en 2015 :
http://flyingfrogblog.blogspot.com.br/2015/02/memory-management-myths-in-apple-circles.html?m=1
- En 2012, Sebastian Sylvan réfléchit à haut voix
sur les qualités d'un bon modèle de collecte d'ordures :
http://sebastiansylvan.com/2012/12/01/garbage-collection-thoughts/
- Concevoir un moteur de collecte d'ordures, texte de
2016, mais avec un volet publicitaire agressif, soyez averti(e) :
http://blog.gainlo.co/index.php/2016/07/25/design-a-garbage-collection-system-part-i/
- Les pauses causées par la collecte d'ordures, expliquées par Matt Warren en
2016 :
http://mattwarren.org/2016/08/08/GC-Pauses-and-Safe-Points/
Sites Wiki sur le sujet :
Mesurer les « performances » de moteurs de collecte d'ordures :
Un langage d'assemblage
avec collecte automatique d'ordures : ftp://ftp.research.microsoft.com/pub/tr/TR-2006-169.pdf
Collecte d'ordures telle qu'implémentée sous
Python et
Ruby, textes de
Pat Shaughnessy :
Opinions :
Technique :
- Collecte d'ordures sans accès exagérés au disque :
http://www.cs.umass.edu/~emery/pubs/f034-hertz.pdf
- Sécuriser la collecte d'ordures : ftp://ftp.cs.princeton.edu/techreports/1999/609.pdf
- Une série d'articles sur le développement d'un moteur de collecte d'ordures : http://blogs.msdn.com/b/abhinaba/archive/2009/01/25/back-to-basic-series-on-dynamic-memory-management.aspx
- Texte de
Hans
Boehm et
Mark
Weiser, en 1988 (du moins j'en ai l'impression),
sur la problématique de la collecte d'ordures dans un environnement qualifié
de peu coopératif
- Texte de 2012 par Reginald Braithwaite et proposant
une implémentation de collecte d'ordures à l'aide de programmation
orientée aspect :
https://github.com/raganwald/homoiconic/blob/master/2012/03/garbage_collection_in_coffeescript.md
- Réflexions de Sebastian Sylvan en 2012 sur la
collecte d'ordures, ou comment l'implémenter efficacement et intelligemment :
http://sebastiansylvan.wordpress.com/2012/12/01/garbage-collection-thoughts/
- Texte de 2011 par Peter Schuller, portant sur les
principales variantes des techniques de collecte automatique d'ordures, mettant
l'accent sur ce qui se fait en Java :
http://worldmodscode.wordpress.com/2011/12/26/practical-garbage-collection-part-1-introduction/
- Collecte d'ordures en parallèle sur plusieurs
coeurs : http://flyingfrogblog.blogspot.com/2010/09/are-multicore-capable-garbage.html
- En 2013, Niklas Frykholm explique qu'il est de
moins en moins réticent à utiliser un moteur de collecte d'ordures pour du code
à haute performance, mais que pour que cela mène à du code dont les performances sont à la hauteur, il est préférable d'allouer de gros
blocs de mémoire et de travailler dans une optique axée sur les données, quitte
à gérer de la fragmentation interne :
http://www.altdevblogaday.com/2013/01/31/garbage-collection-and-memory-allocation-sizes/
- Étude du tas (Heap) dans les langages munis d'un moteur de collecte
d'ordures, par Elvira Albert,Samir Genaim et Miguel Gómez-Zamalloa en 2012 :
http://costa.ls.fi.upm.es/papers/costa/AlbertGGZ12.pdf
- Techniques modernes de collecte d'ordures, présentation de Sasha Goldshtein
en 2013 :
http://blogs.microsoft.co.il/sasha/2013/11/05/modern-garbage-collection-in-theory-and-practice/
- La collecte générationnelle d'ordures a été intégrée à
Firefox en
2014, quoique comme le relate
Nicholas Nethercote, les gains ne sont pas nécessairement à la hauteur des
attentes :
https://blog.mozilla.org/nnethercote/2014/03/31/generational-gc-has-landed/
- Comment fonctionne le moteur de collecte d'ordures de la
machine virtuelle V8, par
Jay Conrod en 2014 :
http://jayconrod.com/posts/55/a-tour-of-v8-garbage-collection
- Un moteur de collecte d'ordures générationnel « jouet », proposé en
2016 par Anton Kropp :
http://onoffswitch.net/toy-generational-garbage-collector/
- À propos des moteurs de collecte d'ordures générationnels et de leur
optimisation, texte de Martin Cracauer
en 2016 :
https://medium.com/@MartinCracauer/generational-garbage-collection-write-barriers-write-protection-and-userfaultfd-2-8b0e796b8f7f
- Étude comparative par Jack Mott en 2016, qui a
implémenté, puis raffiné des moteurs de collecte d'ordures en trois langages
distincts :
https://jackmott.github.io/programming/2016/09/01/performance-in-the-large.html
Sous le modèle
.NET
Comprendre le modèle préconisé par la
plateforme .NET :
La pile est un détail d'implémentation :
À propos de la finalisation :
Sur la durée de vie des objets à portée locale : http://blogs.msdn.com/ericgu/archive/2004/07/23/192842.aspx
Écrire des programmes qui aident la collecte d'ordures à mieux performer :
Utiliser sainement la mémoire avec
C# :
Exploiter la collecte d'ordures efficacement :
Comprendre l'interface IDisposable :
Comprendre les WeakReference :
Réaliser un regroupement d'objets (Object Pooling) : http://www.codeproject.com/KB/recipes/ObjectPooling.aspx
Collecte d'ordures sous
.NET et
comportement d'un programme :
À propos de sgen, le moteur de collecte
d'ordures de Mono :
Sous le modèle Java
Historique de la collecte d'ordures dans ce langage : http://www.ibm.com/developerworks/java/library/j-jtp10283/
Les approches des trois principales
JVM sur le
marché : http://blog.dynatrace.com/2011/05/11/how-garbage-collection-differs-in-the-three-big-jvms/
Légendes urbaines quant à la performance de ce modèle : http://www.ibm.com/developerworks/java/library/j-jtp09275.html?ca=dgr-lnxw01JavaUrbanLegends
Comment fonctionne la collecte d'ordures dans la
JVM HotSpot : http://www.ibm.com/developerworks/opensource/library/j-jtp11253/
Comment calibrer la collecte d'ordures dans la
JVM HotSpot : http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html (pour une version antérieure : http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html)
Collecte d'ordures quant la
JVM a accès
à beaucoup de mémoire vive : http://www.artima.com//lejava/articles/javaone_2008_gil_tene.html
Les modèles de collecte d'ordures disponibles pour Java :
La collecte d'ordures sous Java, série d'articles par Richard Waburton en
2013 :
Le nouveau (en 2009) moteur de collecte d'ordures, nommé G1 :
La collecte d'ordures n'élimine pas toutes les fuites de mémoire : http://johnsofteng.wordpress.com/2009/04/10/java-memory-leaks/
Collecte d'ordures et respect de contraintes de temps réel : http://queue.acm.org/detail.cfm?id=1217268
Le modèle sans pauses d'Azul :
En comparaison avec celui d'Erlang :
http://www.javacodegeeks.com/2011/04/erlang-vs-java-memory-architecture.html
Analyser les problèmes de gestion de mémoire avec Java :
Gérer la finalisation sous Java,
par Tony Printezis en 2007 : http://java.sun.com/developer/technicalArticles/javase/finalization/
Raffinements apportés à la gestion de la mémoire avec
Java 8, rapportés par
Pierre-Hugues Charbonneau en 2013 :
http://java.dzone.com/articles/java-8-permgen-metaspace
Fichiers en mémoire (Memory-Mapped Files) avec Java,
texte d'Alexander Turner en 2013 :
http://jaxenter.com/high-speed-multi-threaded-virtual-memory-in-java.1-46188.html
Réduire les coûts du moteur de collecte d'ordures de Java, un texte d'Iris
Shoor en 2013 :
http://www.javacodegeeks.com/2013/07/5-coding-hacks-to-reduce-gc-overhead.html
Choisir la stratégie qui vous convient, par Eva Andreasson en
2014 :
http://www.javaworld.com/article/2078645/java-se/jvm-performance-optimization-part-3-garbage-collection.html
Collecte d'ordures et
Java 8, par
Tal Weiss en 2014 :
http://blog.takipi.com/garbage-collectors-serial-vs-parallel-vs-cms-vs-the-g1-and-whats-new-in-java-8/
Collecte d'ordures avec
Java 9, par Uwe
Schindler en 2015 :
https://jaxenter.com/java-9s-new-garbage-collector-whats-changing-whats-staying-118313.html
En 2016, Julia Evans relate les coûts en termes
de temps d'exécution de la collecte d'ordures dans un programme Java,
après en avoir payé le prix :
http://jvns.ca/blog/2016/04/22/java-garbage-collection-can-be-really-slow/
(il semble qu'elle ait reçu beaucoup d'information sur le sujet dès le
lendemain, et qu'elle ait colligé les liens reçus sur
http://jvns.ca/blog/2016/04/23/some-links-on-java-garbage-collection/ alors
avis aux intéressé(e)s!)
Sous le modèle C++
Démonstration de faisabilité d'un moteur de collecte d'ordures
pour C++
(par Bjarne
Stroustrup, et en 1996!) : http://www.open-std.org/jtc1/sc22/wg21/docs/papers/1996/N0932.pdf
Samuel Williams, en 2011, a écrit cette
petite ébauche d'un embryon de moteur de collecte d'ordures (avec invocation
manuelle et, ce qui est normal, sans finalisation) : http://www.oriontransfer.co.nz/blog/2011-09/simple-garbage-collector/index
Quelques moteurs de collecte d'ordures possibles :
Le (très connu) moteur de collecte d'ordures de Hans
Boehm :
Propositions en vue du standard C++ 11 :
Une voix dissonante (mais forte), celle d'Andrew
Koenig : http://www.ddj.com/blog/cppblog/archives/2008/02/automatic_memor.html
Une discussion simple des diverses options envisageables pour une collecte
automatique d'ordures sous C++,
mais avec une discussion beaucoup plus riche et détaillée dans
les commentaires de l'article. L'article en soi est de Herb
Sutter en 2011 : http://herbsutter.com/2011/10/25/garbage-collection-synopsis-and-c/
En général, avec C++, l'approche privilégiée repose sur les pointeurs intelligents. Pour un texte un peu plus vieux (1993!) de Nathan Myers sur la gestion de la mémoire dans ce langage, voir http://www.cantrip.org/wave12.html
Sous d'autres modèles
Gestion de la mémoire sous ActionScript :
La collecte d'ordures répartie sous AmbientTalk :
Gestion de mémoire en langage
C :
Gestion de la mémoire avec
D :
La collecte d'ordures sous
Epoch :
La collecte d'ordures sous Erlang :
Avec
Go :
- Exemples de multiprogrammation avec
Go : http://soniacodes.wordpress.com/2011/03/15/concurrency-review/
- La collecte d'ordures sous
Go, un texte constructif de 2013 :
http://bitsquid.blogspot.ca/2013/01/garbage-collection-and-memory.html
- Pourquoi la pile d'exécution d'un programme
Go est « infinie », par Dave
Cheney en 2013 :
http://dave.cheney.net/2013/06/02/why-is-a-goroutines-stack-infinite
- Comprendre le moteur de collecte d'ordures de
Go et gérer sainement sa
mémoire, un texte de John Graham-Cumming en 2013 :
http://blog.cloudflare.com/recycling-memory-buffers-in-go
- Améliorer le moteur de collecte d'ordures de
Go en le
simplifiant, par Dimitry Vyukov en 2014 :
https://docs.google.com/document/d/1v4Oqa0WwHunqlb8C3ObL_uNQw3DfSY-ztoA-4wWbKcg/pub
- Collecte d'ordures concurrente avec
Go, par Augustin Clements en 2015 :
https://docs.google.com/document/d/1wmjrocXIWTr1JxU-3EQBI6BK6KgtiFArkG47XK73xIQ/
- S'attaquer au problème de la latence lors de collectes d'ordures avec
Go, par Richard L.
Hudson en 2015 :
https://sourcegraph.com/blog/live/gophercon2015/123574706480
- Les priorités de la collecte d'ordures avec
Go
1.5 sont la basse latence et la simplicité. À cet effet, texte de Richard Hudson en
2015 :
https://blog.golang.org/go15gc
- Les défis envisagés pour la collecte d'ordures avec la version
1.6 du langage, selon Austin Clements et de Rick Hudson en
2015 :
https://docs.google.com/document/d/1kBx98ulj5V5M9Zdeamy7v6ofZXX3yPziAf0V27A64Mo/edit
- Un moteur de collecte d'ordures « orienté transactions », par Rick Hudson
et Austin Clements en 2016 :
https://docs.google.com/document/d/1gCsFxXamW8RRvOe5hECz98Ftk-tcRRJcDFANj2VwCB0/edit
- Le chemin de
Go vers un moteur de collecte d'ordures à basse latence,
selon Rhys Hiltner en 2016 :
https://blog.twitch.tv/gos-march-to-low-latency-gc-a6fa96f06eb7
- En 2016, les pauses de collecte d'ordures avec
Go 1.8
passent sous la milliseconde, suivant l'application de cette approche
par Austin Clements et Rick Hudson :
https://github.com/golang/proposal/blob/master/design/17503-eliminate-rescan.md
Les techniques de comptage de références dans le noyau
de Linux :
La collecte d'ordures sous
LLVM :
La collecte d'ordures sous Lua :
À propos du modèle d'OCaml :
À propos du modèle de
PHP :
La collecte d'ordures en Racket :
La collecte d'ordures sous Ruby :
Gestion de la mémoire avec
Rust :
La collecte d'ordures sous Haskell :
Collecte d'ordures et jeux vidéos :
Collecte d'ordures et systèmes en temps
réel :
Automatisation de la gestion des ressources avec Objective-C :
La collecte d'ordures dans JScript à l'intérieur du fureteur Internet
Explorer, versions 6 et 7, et ce que l'équipe de gmail avait fait à l'époque
pour en combattre les effets négatifs. Une histoire relatée par Daniel F Pupius en 2013 :
https://medium.com/joys-of-javascript/6b1ea3ffca45
Collecte d'ordures sous
Ruby :
Collecte d'ordures avec
Firefox :
Le moteur de collecte d'ordures de
LLVM, décrit en
2013 :
https://eschew.wordpress.com/2013/10/28/on-llvms-gc-infrastructure/
Mémoire virtuelle
Comprendre la mémoire virtuelle, texte de 2004
par Norm Murray et Neil Horman :
http://www.redhat.com/magazine/001nov04/features/vm/
http://blog.ksplice.com/2010/03/null-pointers-part-i/
Une vision générale du sens à donner à une erreur
de type Out Of Memory : http://blogs.msdn.com/b/ericlippert/archive/2009/06/08/out-of-memory-does-not-refer-to-physical-memory.aspx
En 2006, Poul-Henning Kamp nous recommande de laisser
le système d'exploitation faire son travail : https://www.varnish-cache.org/trac/wiki/ArchitectNotes
Allocateurs
Un allocateur constitue une abstraction de la machine et de ses mécanismes de
gestion de la mémoire, et est destiné à collaborer avec un
conteneur.
Considérations historiques et culturelles :
Considérations techniques :
Considérations de vitesse :
Le modèle Bloomberg :
Le standard C++ 11
a fortement raffiné le modèle traditionnel des allocateurs.
Texte de 2013 où
Nicholas Nethercote explique qu'une bibliothèque devrait toujours accepter
que son code client utilise un allocateur maison, prenant pour exemple les
facilités de gestion de mémoire de
Firefox et sa capacité
d'offrir un portrait réaliste de sa consommation de mémoire :
https://blog.mozilla.org/nnethercote/2013/11/08/libraries-should-permit-custom-allocators/
Les allocateurs avec
Rust, par Nicholas D. Matsakis en
2014 :
http://smallcultfollowing.com/babysteps/blog/2014/11/14/allocators-in-rust/
Textes de Nicholas Frechette :
Partage de mémoire
Les bytes privés et les bytes protégés dans le monde .NET : http://seewinapp.blogspot.com/2005/09/pdc-shared-bytes-private-bytes-and.html
Gérer des événements synchrones dans des objets partagés sous Linux : http://www.ibm.com/developerworks/linux/library/l-syncevent/index.html
Partage de mémoire entre processus sous Microsoft Windows : http://www.codeproject.com/KB/threads/MemMap.aspx
Un texte de 1997 sur la mémoire partagée répartie, écrit par Daniel J. Scales et Kourosh Gharachorloo : http://pages.cs.wisc.edu/~bart/739/papers/shasta.pdf
