L'allocation mémoire ne se fait jamais octet par octet, qu'il s'agisse de langages à ramasse miettes (GC) — comme OCaml, Scheme, pour ne citer que mes préférés — ou du C. Chacun de ces langages a son propre système de gestion de la mémoire qui réserve de la mémoire de façon surabondante puis la fournit à l'utilisateur (le programme, client de l'OS) selon ses besoins.
Et alors ? Visiblement tu n'as pas compris le sens de ma remarque. Même si ton langage à GC fait un gros malloc(), il va le partitionner en beaucoup de petites zones (une par objet), chacune susceptible d'être modifiée ne serait-ce qu'une fois, et donc de faire perdre le partage dû au copy-on-write sur toute la page.
C'est aussi ce qui fait croire, de façon fort erronée, que les langages à GC utilisent beaucoup de mémoire.
Non, ce n'est pas ça. Les langages à GC sont simplement, d'une manière générale, des langages haut niveau avec des types et des structures de données plus sophistiqués que le C. C'est donc normal qu'ils prennent généralement plus de mémoire, à problème équivalent.
Ensuite l'OS ne gère pas la mémoire physique octet par octet, mais probablement page par page, donc avec une certaine granularité
C'est gentil à toi de répéter ce que j'ai dit dans le message auquel tu réponds.
L'OS répond par une promesse d'allocation mais ne réservera de la mémoire physique que si la mémoire est effectivement utilisée, lue ou écrite par exemple.
C'est le cas de Linux, mais pas de Solaris, par exemple. Ça peut causer de mauvaises surprises, y compris, par exemple, dans le cas d'un fork()...
[^] # Re: Firefox 9
Posté par Antoine . En réponse à la dépêche Firefox 8 est disponible. Évalué à 3.
Et alors ? Visiblement tu n'as pas compris le sens de ma remarque. Même si ton langage à GC fait un gros malloc(), il va le partitionner en beaucoup de petites zones (une par objet), chacune susceptible d'être modifiée ne serait-ce qu'une fois, et donc de faire perdre le partage dû au copy-on-write sur toute la page.
Non, ce n'est pas ça. Les langages à GC sont simplement, d'une manière générale, des langages haut niveau avec des types et des structures de données plus sophistiqués que le C. C'est donc normal qu'ils prennent généralement plus de mémoire, à problème équivalent.
C'est gentil à toi de répéter ce que j'ai dit dans le message auquel tu réponds.
C'est le cas de Linux, mais pas de Solaris, par exemple. Ça peut causer de mauvaises surprises, y compris, par exemple, dans le cas d'un fork()...