diff --git a/TP3/.gitignore b/TP3/.gitignore new file mode 100644 index 0000000..e1817f3 --- /dev/null +++ b/TP3/.gitignore @@ -0,0 +1,2 @@ +alloc_statique +alloc_dynamique diff --git a/TP3/Makefile b/TP3/Makefile new file mode 100644 index 0000000..a216135 --- /dev/null +++ b/TP3/Makefile @@ -0,0 +1,9 @@ +all: $(patsubst %.c,%,$(shell ls *.c)) + +%: %.c + clang -Wall -Wextra $< -o $@ + +.PHONY: all clean + +clean: + rm *.exe diff --git a/TP3/alloc_dynamique b/TP3/alloc_dynamique new file mode 100755 index 0000000..a34868b Binary files /dev/null and b/TP3/alloc_dynamique differ diff --git a/TP3/alloc_dynamique.c b/TP3/alloc_dynamique.c new file mode 100644 index 0000000..7bb0dfc --- /dev/null +++ b/TP3/alloc_dynamique.c @@ -0,0 +1,48 @@ +#include +#include +#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; +} diff --git a/TP3/alloc_statique.c b/TP3/alloc_statique.c new file mode 100644 index 0000000..3b75834 --- /dev/null +++ b/TP3/alloc_statique.c @@ -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 + +}