Man page - mallinfo2(3)

Packages contains this manual

Available languages:

en fr

Manual

mallinfo

NOM
BIBLIOTHÈQUE
SYNOPSIS
DESCRIPTION
ATTRIBUTS
STANDARDS
HISTORIQUE
BOGUES
EXEMPLES
Source du programme
VOIR AUSSI
TRADUCTION

NOM

mallinfo, mallinfo2 - Obtenir les paramĂštres d’allocation de mĂ©moire

BIBLIOTHÈQUE

BibliothĂšque C standard ( libc , -lc )

SYNOPSIS

#include <malloc.h>

struct mallinfo mallinfo(void);
struct mallinfo2 mallinfo2(void);

DESCRIPTION

Ces fonctions renvoient une copie de la structure contenant les informations sur les allocations mĂ©moires effectuĂ©es par malloc (3) et les fonctions qui lui sont associĂ©es. La structure renvoyĂ©e par chaque fonction contient les mĂȘmes champs. Cependant, la fonction plus ancienne mallinfo () est obsolĂšte puisque le type des champs est trop petit (voir BOGUES).

Il est à noter que toutes les allocations ne sont pas observables par ces fonctions ; consultez BOGUES et envisagez l’utilisation de malloc_info (3) à la place.

La structure mallinfo2 renvoyée par mallinfo2 () est définie comme suit :

struct mallinfo {
size_t arena; /* Espace alloué en mémoire non projetée (octet) */
size_t ordblks; /* Nombre de fragments libres */
size_t smblks; /* Nombre de blocs « fastbin » libres */
size_t hblks; /* Nombre de zones de mémoire projetée */
size_t hblkhd; /* Espace alloué en zones de mém. projetée (octet) */
size_t usmblks; /* Voir ci-dessous */
size_t fsmblks; /* Espace en blocs « fastbin » libérés (octet) */
size_t uordblks; /* Espace alloué total (octet) */
size_t fordblks; /* Espace libre total (octet) */
size_t keepcost; /* Plus grand espace libérable (octet) */
};

La structure mallinfo renvoyĂ©e par la fonction obsolĂšte mallinfo () est exactement la mĂȘme mis Ă  part que les champs sont de type int .

Les champs de la structure contiennent les informations suivantes :

arena

La quantitĂ© de mĂ©moire allouĂ©e par d’autres moyens que mmap (2) (c’est-Ă -dire la mĂ©moire allouĂ©e dans le tas). Ce chiffre inclut Ă  la fois les blocs en cours d’utilisation et ceux marquĂ©s comme libres.

ordblks

Le nombre de blocs libres normaux (c’est-Ă -dire non « fastbin »).

smblks

Le nombre de blocs libres « fastbin » (consultez mallopt (3)).

hblks

Le nombre de blocs actuellement allouĂ©s par mmap (2). Consultez mallopt (3) pour l’explication de M_MMAP_THRESHOLD .

hblkhd

Le nombre d’octets des blocs actuellement allouĂ©s par mmap (2).

usmblks

Ce champ n’est pas utilisĂ© et vaut toujours 0. Historiquement, c’était le « niveau haut » d’espace allouĂ© — c’est-Ă -dire la quantitĂ© d’espace maximale qui a dĂ©jĂ  Ă©tĂ© allouĂ©e. Ce champ n’est maintenu que dans les environnements sans thread.

fsmblks

Le nombre total d’octets dans les blocs libres « fastbin ».

uordblks

Le nombre total d’octets consommĂ©s par des allocations en cours d’utilisation.

fordblks

Le nombre total d’octets dans les blocs libres.

keepcost

La quantitĂ© totale d’espace libĂ©rable au sommet du tas. C’est le nombre maximal d’octets qui pourraient au mieux (c’est-Ă -dire en ignorant les restrictions d’alignement de page, etc.) ĂȘtre libĂ©rĂ©s par malloc_trim (3).

ATTRIBUTS

Pour une explication des termes utilisés dans cette section, consulter attributes (7).

Image grohtml-3879026-1.png

mallinfo ()/ malloinfo2 () accĂšde Ă  des objets globaux internes. S’ils sont modifiĂ©s de façon non atomique, les rĂ©sultats peuvent ne pas ĂȘtre cohĂ©rents. L’identifiant mallopt dans const::mallopt signifie que mallopt () modifie ces objets globaux internes de façon atomique, rendant mallinfo ()/ mallinfo2 () suffisamment sĂ»r, d’autres modifications non atomiques ne le garantissant peut-ĂȘtre pas.

STANDARDS

Aucun.

HISTORIQUE

mallinfo ()

glibc 2.0. SVID.

mallinfo2 ()

glibc 2.33.

BOGUES

Les renseignements ne sont renvoyĂ©s que pour la zone principale d’allocation de mĂ©moire. Les allocations dans les autres domaines sont exclues. Consultez malloc_stats (3) et malloc_info (3) pour les alternatives qui contiennent des renseignements sur d’autres domaines.

Les champs de la structure mallinfo renvoyĂ©e par l’ancienne fonction mallinfo () sont de type int . Cependant, puisque certaines valeurs servant Ă  la gestion interne pourraient ĂȘtre de type long , les valeurs rendues pourraient ĂȘtre arrondies Ă  zĂ©ro et ĂȘtre par consĂ©quent incorrectes.

EXEMPLES

Le programme ci-dessous utilise mallinfo2 () pour rĂ©cupĂ©rer les statistiques d’allocation de mĂ©moire avant et aprĂšs l’allocation et la libĂ©ration de certains blocs de mĂ©moire. Les statistiques sont affichĂ©es sur la sortie standard.

Les deux premiers paramÚtres en ligne de commande définissent le nombre et la taille des blocs à allouer avec malloc (3).

Les trois arguments restants dĂ©finissent les blocs allouĂ©s qui devraient ĂȘtre libĂ©rĂ©s avec free (3). Ces trois arguments sont facultatifs et dĂ©finissent (dans l’ordre) : la taille du tas Ă  utiliser dans la boucle qui libĂšre les blocs (1 par dĂ©faut, ce qui signifie de libĂ©rer tous les blocs de l’intervalle), la position du premier bloc Ă  libĂ©rer (0 par dĂ©faut, ce qui signifie le premier bloc allouĂ©) et un nombre supĂ©rieur d’une unitĂ© Ă  la position du dernier bloc Ă  libĂ©rer (le nombre supĂ©rieur de 1 au nombre maximal de blocs par dĂ©faut). Si aucun de ces trois arguments n’est prĂ©sent, tous les blocs seront libĂ©rĂ©s par dĂ©faut.

Dans l’exemple suivant, 1000 allocations de 100 octets sont effectuĂ©es, puis chaque deuxiĂšme bloc allouĂ© est libĂ©ré :

$ ./a.out 1000 100 2
============= Avant allocation des blocs =============
Total d’o. en mĂ©m. non projetĂ©e (arena) : 0
Nb. de fragments libres (ordblks) : 1
Nb. de blocs fastbin libres (smblks) : 0
Nb. de zones de mémoire projetée : 0
Octets en mém. non projetée (hblkhd) : 0
Max. total d’espace allouĂ© (usmblks) : 0
Octets libres en fastbins (fsmblks) : 0
Espace alloué total (uordblks) : 0
Espace libre total (fordblks) : 0
Bloc sup. maxi. libérable (keepcost) : 0
============= AprĂšs allocation des blocs =============
Total d’o en mĂ©m. non projetĂ©e (arena) : 135168
Nb. de fragments libres (ordblks) : 1
Nb. de blocs fastbin libres (smblks) : 0
Nb. de zones de mémoire projetée : 0
Octets en mém. non projetée (hblkhd) : 0
Max. total d’espace allouĂ© (usmblks) : 0
Octets libres en fastbins (fsmblks) : 0
Espace alloué total (uordblks) : 104000
Espace libre total (fordblks) : 31168
Bloc sup. maxi. libérable (keepcost) : 31168
============= AprÚs libération des blocs =============
Total d’o en mĂ©m. non projetĂ©e (arena) : 135168
Nb. de fragments libres (ordblks) : 501
Nb. de blocs fastbin libres (smblks) : 0
Nb. de zones de mémoire projetée : 0
Octets en mém. non projetée (hblkhd) : 0
Max. total d’espace allouĂ© (usmblks) : 0
Octets libres en fastbins (fsmblks) : 0
Espace alloué total (uordblks) : 52000
Espace libre total (fordblks) : 83168
Bloc sup. maxi. libérable (keepcost) : 31168

Source du programme

#include <malloc.h>
#include <stdlib.h>
#include <string.h>
static void
display_mallinfo2(void)
{
struct mallinfo2 mi;
mi = mallinfo2();
printf("Total non-mmapped bytes (arena): %zu\n", mi.arena);
printf("# of free chunks (ordblks): %zu\n", mi.ordblks);
printf("# of free fastbin blocks (smblks): %zu\n", mi.smblks);
printf("# of mapped regions (hblks): %zu\n", mi.hblks);
printf("Bytes in mapped regions (hblkhd): %zu\n", mi.hblkhd);
printf("Max. total allocated space (usmblks): %zu\n", mi.usmblks);
printf("Free bytes held in fastbins (fsmblks): %zu\n", mi.fsmblks);
printf("Total allocated space (uordblks): %zu\n", mi.uordblks);
printf("Total free space (fordblks): %zu\n", mi.fordblks);
printf("Topmost releasable block (keepcost): %zu\n", mi.keepcost);
}
int
main(int argc, char *argv[])
{
#define MAX_ALLOCS 2000000
char *alloc[MAX_ALLOCS];
size_t blockSize, numBlocks, freeBegin, freeEnd, freeStep;
if (argc < 3 || strcmp(argv[1], "--help") == 0) {
fprintf(stderr, "%s num-blocks block-size [free-step "
"[start-free [end-free]]]\n", argv[0]);
exit(EXIT_FAILURE);
}
numBlocks = atoi(argv[1]);
blockSize = atoi(argv[2]);
freeStep = (argc > 3) ? atoi(argv[3]) : 1;
freeBegin = (argc > 4) ? atoi(argv[4]) : 0;
freeEnd = (argc > 5) ? atoi(argv[5]) : numBlocks;
printf("============== Before allocating blocks ==============\n");
display_mallinfo2();
for (size_t j = 0; j < numBlocks; j++) {
if (numBlocks >= MAX_ALLOCS) {
fprintf(stderr, "Too many allocations\n");
exit(EXIT_FAILURE);
}
alloc[j] = malloc(blockSize);
if (alloc[j] == NULL) {
perror("malloc");
exit(EXIT_FAILURE);
}
}
printf("\n============== After allocating blocks ==============\n");
display_mallinfo2();
for (size_t j = freeBegin; j < freeEnd; j += freeStep)
free(alloc[j]);
printf("\n============== After freeing blocks ==============\n");
display_mallinfo2();
exit(EXIT_SUCCESS);
}

VOIR AUSSI

mmap (2), malloc (3), malloc_info (3), malloc_stats (3), malloc_trim (3), mallopt (3)

TRADUCTION

La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org> et Grégoire Scano <gregoire.scano@malloc.fr>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n’y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org .