.\" -*- coding: UTF-8 -*- .\" Copyright (c) 2012 by Michael Kerrisk .\" .\" %%%LICENSE_START(VERBATIM) .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. .\" .\" Permission is granted to copy and distribute modified versions of this .\" manual under the conditions for verbatim copying, provided that the .\" entire resulting derived work is distributed under the terms of a .\" permission notice identical to this one. .\" .\" Since the Linux kernel and libraries are constantly changing, this .\" manual page may be incorrect or out-of-date. The author(s) assume no .\" responsibility for errors or omissions, or for damages resulting from .\" the use of the information contained herein. The author(s) may not .\" have taken the same level of care in the production of this manual, .\" which is licensed free of charge, as they might when working .\" professionally. .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" %%%LICENSE_END .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH MALLINFO 3 "1 novembre 2020" Linux "Manuel du programmeur Linux" .SH NOM mallinfo \- Obtenir les paramètres d'allocation de mémoire .SH SYNOPSIS \fB#include \fP .PP \fBstruct mallinfo mallinfo(void);\fP .SH DESCRIPTION La fonction \fBmallinfo\fP() renvoie une copie d'une structure contenant les détails des allocations mémoire effectuées par \fBmalloc\fP(3) et d'autres fonctions associées. .PP Il est à noter que toutes les allocations ne sont pas observables par \fBmallinfo\fP()\ ; consultez BOGUES et considérez l'utilisation de \fBmalloc_info\fP(3) à la place. .PP La structure renvoyée est définie comme suit\ : .PP .in +4n .EX struct mallinfo { int arena; /* Non\-mmapped space allocated (bytes) */ int ordblks; /* Number of free chunks */ int smblks; /* Number of free fastbin blocks */ int hblks; /* Number of mmapped regions */ int hblkhd; /* Space allocated in mmapped regions (bytes) */ int usmblks; /* See below */ int fsmblks; /* Space in freed fastbin blocks (bytes) */ int uordblks; /* Total allocated space (bytes) */ int fordblks; /* Total free space (bytes) */ int keepcost; /* Top\-most, releasable space (bytes) */ }; .EE .in .PP Les champs de la structure \fImallinfo\fP contiennent les informations suivantes\ : .TP 10 \fIarena\fP La quantité de mémoire allouée par d'autres moyens que \fBmmap\fP(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. .TP \fIordblks\fP Le nombre de blocs libres normaux (c'est\-à\-dire non «\ fastbin\ »). .TP \fIsmblks\fP .\" the glibc info page wrongly says this field is unused .\" https://sourceware.org/bugzilla/show_bug.cgi?id=26746 Le nombre de blocs libres «\ fastbin\ » (consultez \fBmallopt\fP(3)). .TP \fIhblks\fP Le nombre de blocs actuellement alloués par \fBmmap\fP(2). Consultez \fBmallopt\fP(3) pour l'explication de \fBM_MMAP_THRESHOLD\fP. .TP \fIhblkhd\fP Le nombre d'octets des blocs actuellement alloués par \fBmmap\fP(2). .TP \fIusmblks\fP .\" It seems to have been zero since at least as far back as glibc 2.15 This field is unused, and is always 0. Historically, it was the "highwater mark" for allocated space\(emthat is, the maximum amount of space that was ever allocated (in bytes); this field was maintained only in nonthreading environments. .TP \fIfsmblks\fP .\" the glibc info page wrongly says this field is unused .\" https://sourceware.org/bugzilla/show_bug.cgi?id=26746 Le nombre total d'octets dans les blocs libres «\ fastbin\ ». .TP \fIuordblks\fP Le nombre total d'octets consommés par des allocations en cours d'utilisation. .TP \fIfordblks\fP Le nombre total d'octets dans les blocs libres. .TP \fIkeepcost\fP .\" .SH VERSIONS .\" Available already in glibc 2.0, possibly earlier 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 \fBmalloc_trim\fP(3). .SH ATTRIBUTS Pour une explication des termes utilisés dans cette section, consulter \fBattributes\fP(7). .TS allbox; lb lb lbw28 l l l. Interface Attribut Valeur T{ \fBmallinfo\fP() T} Sécurité des threads MT\-Unsafe init const:mallopt .TE .sp 1 \fBmallinfo\fP() 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 \fImallopt\fP dans \fIconst::mallopt\fP signifie que \fBmallopt\fP() modifie ces objets globaux internes de façon atomique, rendant \fBmallinfo\fP() suffisamment sûr, d'autres modifications non atomiques ne le garantissant peut\-être pas. .SH CONFORMITÉ Cette fonction n'est pas spécifiée par les standards POSIX ou C. Une fonction similaire existe sur de nombreux dérivés de System\ V, et était spécifiée dans SVID. .SH BOGUES .\" FIXME . http://sourceware.org/bugzilla/show_bug.cgi?id=208 .\" See the 24 Aug 2011 mail by Paul Pluzhnikov: .\" "[patch] Fix mallinfo() to accumulate results for all arenas" .\" on libc-alpha@sourceware.org \fBLes renseignements ne sont renvoyés que pour la zone principale d'allocation de mémoire.\fP Les allocations dans les autres arènes sont exclues. Consultez \fBmalloc_stats\fP(3) et \fBmalloc_info\fP(3) pour les alternatives qui contiennent des renseignements sur d'autres arènes. .PP Les champs de la structure \fImallinfo\fP sont notés de type \fIint\fP. Cependant, puisque certaines valeurs servant à la gestion interne pourraient être de type \fIlong\fP, les valeurs rendues pourraient être arrondies à zéro et être par conséquent incorrectes. .SH EXEMPLES Le programme ci\-dessous utilise \fBmallinfo\fP() 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. .PP Les deux premiers paramètres en ligne de commande définissent le nombre et la taille des blocs à allouer avec \fBmalloc\fP(3). .PP Les trois arguments restants définissent les blocs alloués qui devraient être libérés avec \fBfree\fP(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. .PP Dans l'exemple suivant, 1000\ allocations de 100\ octets sont effectuées, puis chaque deuxième bloc alloué est libéré\ : .PP .in +4n .EX $ \fB./a.out 1000 100 2\fP ============= 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 libération 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 ============= Avant allocation 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 .EE .in .SS "Source du programme" \& .EX #include #include #include static void display_mallinfo(void) { struct mallinfo mi; mi = mallinfo(); printf("Total d'o en mém. non projetée (arena) : %d\en", mi.arena); printf("Nb. de fragments libres (ordblks) : %d\en", mi.ordblks); printf("Nb. de blocs fastbin libres (smblks) : %d\en", mi.smblks); printf("Nb. de zones de mémoire projetée : %d\en", mi.hblks); printf("Octets en mém. non projetée (hblkhd) : %d\en", mi.hblkhd); printf("Max. total d'espace alloué (usmblks) : %d\en", mi.usmblks); printf("Octets libres en fastbins (fsmblks) : %d\en", mi.fsmblks); printf("Espace alloué total (uordblks) : %d\en", mi.uordblks); printf("Espace libre total (fordblks) : %d\en", mi.fordblks); printf("Bloc sup. maxi. libérable (keepcost) : %d\en", mi.keepcost); } int main(int argc, char *argv[]) { #define MAX_ALLOCS 2000000 char *alloc[MAX_ALLOCS]; int numBlocks, freeBegin, freeEnd, freeStep; size_t blockSize; if (argc < 3 || strcmp(argv[1], "\-\-help") == 0) { fprintf(stderr, "%s nb\-blocs taille\-bloc [pasLib " "[debutLib [finLib]]]\en", argv[0]); exit(EXIT_FAILURE); } nbBlocs = atoi(argv[1]); tailleBloc = atoi(argv[2]); pasLib = (argc > 3) ? atoi(argv[3]) : 1; debutLib = (argc > 4) ? atoi(argv[4]) : 0; finLib = (argc > 5) ? atoi(argv[5]) : nbBlocs; printf("============= Avant allocation des blocs =============\en"); display_mallinfo(); for (int j = 0; j < numBlocks; j++) { if (numBlocks >= MAX_ALLOCS) { fprintf(stderr, "Too many allocations\en"); exit(EXIT_FAILURE); } alloc[j] = malloc(tailleBloc); if (alloc[j] == NULL) perror("malloc"); exit(EXIT_FAILURE); } printf("\en============= Après allocation des blocs =============\en"); display_mallinfo(); for (int j = freeBegin; j < freeEnd; j += freeStep) free(alloc[j]); printf("\en============= Après libération des blocs =============\en"); display_mallinfo(); exit(EXIT_SUCCESS); } .EE .SH "VOIR AUSSI" .ad l .nh \fBmmap\fP(2), \fBmalloc\fP(3), \fBmalloc_info\fP(3), \fBmalloc_stats\fP(3), \fBmalloc_trim\fP(3), \fBmallopt\fP(3) .SH COLOPHON Cette page fait partie de la publication\ 5.10 du projet \fIman\-pages\fP Linux. Une description du projet et des instructions pour signaler des anomalies et la dernière version de cette page peuvent être trouvées à l'adresse \%https://www.kernel.org/doc/man\-pages/. .SH TRADUCTION La traduction française de cette page de manuel a été créée par Christophe Blaess , Stéphan Rafin , Thierry Vignaud , François Micaux, Alain Portal , Jean-Philippe Guérard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas François , Florentin Duneau , Simon Paillard , Denis Barbier , David Prévot et Grégoire Scano . Cette traduction est une documentation libre ; veuillez vous reporter à la .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License version 3 .UE 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 à .MT debian-l10n-french@lists.debian.org .ME .