J'écris un programme c pour allouer une taille spécifique de mémoire et les libérer.
Par défaut, il crée 100 Mo de mémoire au total par malloc 1MB pour chaque entrée d'un tableau de taille 100.
Quand je regarde moniteur système et trouver le programme (ajoutez la pause système à la recherche), il ne montre que 292KiB dans le champ de la mémoire. Est-ce que c'est vrai ? 292KiB et 100MB sont très différents...
Le code comme ci-dessous, vous pouvez juste compiler et exécuter.
#define _GNU_SOURCE
#include <stdlib.h>
#include <stdio.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <sys/param.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdint.h>
#include <getopt.h>
static const char *progname;
struct optargs {
int size;
};
static struct option long_options[] = {
{"size", 1, 0, 's'},
{"help", 0, 0, 'h'},
{ NULL, 0, 0, 0 }
};
void Usage() {
printf("Allocate 150MB memory\n./program --size|-s 150\n");
exit(0);
}
int run(struct optargs opts) {
char *ptr[opts.size];
int steps = 4;
int sz_unit = 1048576; // 1MB
for (int i=0;i<opts.size;i++) {
ptr[i] = calloc(sz_unit, sizeof(char));
}
system("read -p 'Press Enter to continue...' var");
for (int i=0;i<opts.size;i++) {
free(ptr[i]);
}
return 0;
}
int main(int argc, char **argv) {
int opt_size = 0;
int c;
struct optargs opts;
progname = argv[0];
while ((c = getopt_long(argc, argv, "s:h", long_options, NULL)) != -1) {
switch(c) {
case 's':
opt_size = 1;
opts.size = atoi(optarg);
break;
default:
Usage();
break;
}
}
if (!opt_size)
opts.size = 100;
printf("Will allocate %dMB memory\n", opts.size);
run(opts);
return 0;
}
Compilez et exécutez :
gcc FILE -o run
./run