This commit is contained in:
Geoffrey Frogeye 2017-03-03 17:45:25 +01:00
parent 17d12f8016
commit 92ffb7e562
5 changed files with 78 additions and 0 deletions

2
TP3/.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
alloc_statique
alloc_dynamique

9
TP3/Makefile Normal file
View file

@ -0,0 +1,9 @@
all: $(patsubst %.c,%,$(shell ls *.c))
%: %.c
clang -Wall -Wextra $< -o $@
.PHONY: all clean
clean:
rm *.exe

BIN
TP3/alloc_dynamique Executable file

Binary file not shown.

48
TP3/alloc_dynamique.c Normal file
View file

@ -0,0 +1,48 @@
#include <stdio.h>
#include <stdlib.h>
#define SIZE 20000
int main() {
int i, j;
// 2.1.3
int *v;
v = (int *) malloc(SIZE * sizeof(int));
for (i = 0; i < SIZE; i++) {
v[i] = i;
}
// Affichage pour vérifier
// for (i = 0; i < SIZE; i++) {
// // printf("v[%d] = %d\n", i, v[i]);
// }
// 2.1.4
int **mat;
mat = (int **) malloc(SIZE * sizeof(int));
for (i = 0; i < SIZE; i++) {
v = (int *) malloc(SIZE * sizeof(int));
// On attenint la limite pour une taille égale à la RAM + le SWAP disponible
if (v == NULL) {
printf("Limite atteinte: i = %d\n", i);
return EXIT_FAILURE;
}
mat[i] = v;
for (j = 0; j < SIZE; j++) {
v[j] = i + j;
}
}
// Affichage pour vérifier
// for (i = 0; i < SIZE; i++) {
// for (j = 0; j < SIZE; j++) {
// printf("mat[%d][%d] = %d\n", i, j, mat[i][j]);
// }
// }
// 2.1.6
for (i = 0; i < SIZE; i++) {
free(mat[i]);
}
free(mat);
return EXIT_SUCCESS;
}

19
TP3/alloc_statique.c Normal file
View file

@ -0,0 +1,19 @@
#define SIZE 27500
int M[SIZE][SIZE];
int main() {
// 2.1.1
// Sur une machine de TP Astruc ça plante à partir de SIZE ≥ 1448,
// ce qui correspond à SIZE²×sizeof(int)/1024 = 1448²×4/1024 = 8190 KiB
int i, j;
for (i = 0; i < SIZE; i++) {
for (j = 0; j < SIZE; j++) {
M[i][j] = i + j;
}
}
// 2.2.2
// Avec une definition de M en globale, ça plante à partir de 27500 < SIZE ≤ 30000
// Ça dépend en fait de la quantité de RAM et de SWAP disponible
}