Browse Source

TP3

master
Geoffrey Frogeye 3 years ago
parent
commit
92ffb7e562
5 changed files with 78 additions and 0 deletions
  1. +2
    -0
      TP3/.gitignore
  2. +9
    -0
      TP3/Makefile
  3. BIN
      TP3/alloc_dynamique
  4. +48
    -0
      TP3/alloc_dynamique.c
  5. +19
    -0
      TP3/alloc_statique.c

+ 2
- 0
TP3/.gitignore View File

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

+ 9
- 0
TP3/Makefile 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 View File


+ 48
- 0
TP3/alloc_dynamique.c 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
- 0
TP3/alloc_statique.c 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

}