[PDF] Cours Langage C/C++ Mémoire et allocation dynamique





Previous PDF Next PDF



Cinématique et dynamique du point matériel (Cours et exercices

temps (la cinématique) et étudier les forces qui provoquent ou modifient leur mouvement (la dynamique). Ce manuscrit est subdivisé comme suit : La première 



Chapitre 7 :Le principe fondamental de la dynamique

Torseur dynamique : nul car la poutre ne bouge pas. Ce torseur est aussi égal à la somme du Variation de quantité de mouvement au cours d'un choc :.



Cinématique et Dynamique

? Il s'agit de comprendre ce qu'est ce monde physique dont la notion se présente à nous d'elle-même émerge dans notre conscience et évolue d'ailleurs au cours 



Cours Langage C/C++ Mémoire et allocation dynamique

la pile (stack) est l'endroit où sont stockés les paramètres d'appel et les variables locales des fonctions. tv (BTS IRIS Avignon). Cours C/C++.



La programmation dynamique

des sous-probl`emes. 2. Page 5. Plan. Suite de Fibonacci version récursive. Version de la programmation dynamique. Un premier exemple : probl`eme du stockage.



Optimisation et programmation dynamique

Jan 6 2019 Pour la partie sur le contrôle optimal



PROGRAMMATION DYNAMIQUE

Ce cours a pour objectif d'introduire les principaux outils de base en optimal en insistant sur l'approche programmation dynamique de Bellman.



Algorithmique Cours 5 : Programmation dynamique ROB3 – année

Pourquoi « programmation dynamique » ? « The 1950s were not good years for mathematical research. We had a very interesting gentleman in Washington named.



COURS-Dynamique.pdf

physique indépendamment de ses causes nous allons étudier la dynamique



Chapitre 3 Dynamique

2. Calculer l'accélération du mouvement. 3. Au cours du freinage la valeur de la force de résistance aérodynamique est. Fr = 70000N 

Cours Langage C/C++

Mémoire et allocation dynamique

Thierry Vaira

BTS IRIS Avignon

tvaira@free.fr?v0.1

La mémoire

La pile et le tas

La mémoire dans un ordinateur est unesuccession d"octets (soit 8 bits), organisés les uns à la suite des autres etdirectement accessibles par une adresse.En C/C++, la mémoire pour stocker des variables est organisée en

deux catégories :1la pile (stack)2le tas (heap)Remarque : Dans la plupart des langages de programmation compilés,

la pile (stack) est l"endroit où sont stockés les paramètres d"appel et les variables locales des fonctions. tv (BTS IRIS Avignon)Cours C/C++tvaira@free.fr?v0.1 2 / 13

La mémoire

La pile (stack)

La pile (stack) est unespace mémoire réservé au stockage des

variables désallouées automatiquement.Sa taille est limitée mais on peut la régler (appel POSIXsetrlimit).La pile est bâtie sur le modèleLIFO(Last In First Out) ce qui signifie

"Dernier Entré Premier Sorti". Il faut voir cet espace mémoire comme une pile d"assiettes où on a le droit d"empiler/dépiler qu"une seule assiette à la fois. Par contre on a le droit d"empiler des assiettes de taille différente. Lorsque l"on ajoute des assiettes on les empile par le haut, les unes au dessus des autres. Quand on les "dépile" on le fait en commençant aussi par le haut, soit par la dernière posée. Lorsqu"une valeur est dépilée elle est effacée de la mémoire. tv (BTS IRIS Avignon)Cours C/C++tvaira@free.fr?v0.1 3 / 13

La mémoire

Le tas (heap)

Le tas (heap) est l"autresegment de mémoire utilisé lors de l"allocation dynamiquede mémoire durant l"exécution d"un

programme informatique.Sa taille est souvent considére comme illimitée mais elle est en réalité

limitée.Les fonctionsmallocetfree, ainsi que les opérateurs du langage C++newetdeletepermettent, respectivement, d"allouer et

désallouer la mémoire sur le tas.La mémoire allouée dans le tas doit être désallouée explicitement.

tv (BTS IRIS Avignon)Cours C/C++tvaira@free.fr?v0.1 4 / 13

La mémoire

Sous Linux, on peut visualiser facilement les valeurs du tas et de la pile : $ ulimit -a data seg size (kbytes, -d) unlimited stack size (kbytes, -s) 8192 ...La taille de la pile étant limitée (ici à 8Mo), cela peut provoquer des écrasements de variables et surtout des "Erreur de segmentation" en cas de dépassement. Il est évidemment recommandé d"allouer dans le tas les "grosses" variables sous peine de surprise! tv (BTS IRIS Avignon)Cours C/C++tvaira@free.fr?v0.1 5 / 13

Allocation dynamique

malloc et free L"allocation d"une nouvelle zone mémoire se fait dans un endroit

particulier de la mémoire appelée letas(heap).Elle se fait par la fonctionmalloc:void *malloc(size_t

taille);L"argument transmis correspond à latailleen o ctetsde la zone mémoire désirée.La valeur retournée est unpointeurvoid * sur la zone mémoire

allouée, ouNULLen cas d"échec de l"allocation.Si vous devez redimensionner un espace mémoire qui a été alloué

dynamiquement, il faudra utiliser la fonctionrealloc().La mémoire allouée doit, à un moment ou un autre, être libérée.

Cette libération mémoire se fait par la procédurefree:void free(void *pointeur); tv (BTS IRIS Avignon)Cours C/C++tvaira@free.fr?v0.1 6 / 13

Allocation dynamique

Exemple : allocation mémoire

int*p;//pointeur sur un entier int*T;//pointeur sur un entier allocation dynamique d un entier p = (int*)malloc(sizeof(int));//alloue 4 octets (= int )en mémoire *p = 1;//ecrit 1 dans la zone mémoire allouée allocation dynamique d un tableau de 10 int T = (int*)malloc(sizeof(int) * 10);//alloue 4 * 10 octets en mémoire initialise le tableau avec des 0 cf la fonction memset for(inti=0;i<10;i++) { *(T+i) = 0;//les 2 écritures sont possibles T[i] = 0;//identique à la ligne précèdente ou plus directement memset(T, 0,sizeof(int)*10);//il faudra alors inclure string .h free(p);

free(T);Une fois qu"une zone mémoire a été libérée, il ne faut sous aucun prétexte y accéder, de

même qu"il ne faut pas tenter de la libérer une seconde fois. tv (BTS IRIS Avignon)Cours C/C++tvaira@free.fr?v0.1 7 / 13

Allocation dynamique

Règles de bonne conduite

Un certain nombre de règles, quand elles sont observées, permettent de se

mettre à l"abri de problèmes :Toute déclaration de pointeur s"accompagne de son initialisation à

NULLAvant tout appel demalloc(), on doit s"assurer que le pointeur à allouer est bienNULLAprès tout appel demalloc(), on s"assure qu"aucune erreur ne s"est produiteAvant de libérer une zone mémoire, on s"assure que son pointeur n"est pasNULLDès qu"une zone mémoire vient d"être libérée parfree(), on réinitialise son pointeur àNULLtv (BTS IRIS Avignon)Cours C/C++tvaira@free.fr?v0.1 8 / 13

Allocation dynamique

new et delete

Pour allouer dynamiquement en C++, on utilisera l"opérateurnew.Celui-ci renvoyant une adresse où est crée la variable en question, il

nous faudra un pointeur pour la conserver.Manipuler ce pointeur, reviendra à manipuler la variable allouée

dynamiquement.Pour libérer de la mémoire allouée dynamiquement en C++, on utilisera l"opérateurdelete.tv (BTS IRIS Avignon)Cours C/C++tvaira@free.fr?v0.1 9 / 13

Allocation dynamique

Pour allouer dynamiquement en C++, on utilisera l"opérateurnew.Exemple : allocation dynamique include iostream include iostream include new using namespacestd; intmain () int* p1 =newint ;//pointeur sur un entier *p1 = 1;//ecrit 1 dans la zone mémoire allouée cout << *p1 << endl;//lit et affiche le contenu de la zone mémoire allouée deletep1;//libère la zone mémoire allouée return0; tv (BTS IRIS Avignon)Cours C/C++tvaira@free.fr?v0.1 10 / 13

Allocation dynamique

Exemple : allocation dynamique d"un tableau

include iostream include new using namespacestd; intmain () int* p2 =newint [5];//alloue un tableau de 5 entiers en mémoire initialise le tableau avec des 0 cf la fonction memset for(inti=0;i<5;i++) *(p2 + i) = 0;//les 2 écritures sont possibles p2[i] = 0;//identique à la ligne précèdente cout << "p2[" << i << "] = " << p2[i] << endl; delete[] p2;//libère la mémoire allouée return0; tv (BTS IRIS Avignon)Cours C/C++tvaira@free.fr?v0.1 11 / 13

Allocation dynamique

Pour allouer dynamiquement unobjet, on utilisera l"opérateurnew.Exemple : allocation dynamique d"un objet

include iostream include point h using namespacestd; intmain() Point *pointC;//je suis pointeur sur un objet de type Point pointC =newPoint(2,2);//j "allouedynamiquement un objet de type Point

pointC->afficher();//Comme pointC est une adresse ,je dois utiliser l "opérateur-> pour accéder aux

membres de cet objet pointC->setY(0);//je modifie la valeur de l "attribut_y de pointB

(*pointC).afficher();//cette écriture est possible : je pointe l "objetpuis j "appellesa méthode

afficher deletepointC;//ne pas oublier de libérer la mémoire allouée pour cet objet return0; }tv (BTS IRIS Avignon)Cours C/C++tvaira@free.fr?v0.1 12 / 13

Allocation dynamique

Fuite de mémoire

L"allocation dynamique dans le tasne permet pas la désallocation automatique.Chaque allocation avec "new" doit impérativement être libérée

(détruite) avec "delete" sous peine de créer unefuite de mémoire.La fuite de mémoire est une zone mémoire qui a été allouée dans le

tas par un programme qui a omis de la désallouer avant de se terminer. Cela rend la zone inaccessible à toute application (y compris le système d"exploitation) jusqu"au redémarrage du système. Si ce phénomène se produit trop fréquemment la mémoire se remplit de

fuites et le système finit par tomber faute de mémoire.Ce problème est évité en Java en introduisant le mécanisme de

"ramasse-miettes" (Garbage Collector).tv (BTS IRIS Avignon)Cours C/C++tvaira@free.fr?v0.1 13 / 13quotesdbs_dbs50.pdfusesText_50
[PDF] dynamique des fluides exercices corrigés

[PDF] dynamique du point matériel exercices corrigés

[PDF] dynamique géographique des grandes aires continentales

[PDF] dynamique physique cours

[PDF] dynamique physique exercices corrigés

[PDF] dynamiques territoriales etats unis croquis

[PDF] dysgraphie

[PDF] dysgraphie molle

[PDF] dysorthographie et dysgraphie 285 exercices comprendre évaluer remédier s entraîner

[PDF] dysorthographie pdf

[PDF] dysphasie

[PDF] dysplasie carotide interne

[PDF] dysplasie fibromusculaire pdf

[PDF] dysplasie fibromusculaire renale

[PDF] dysplasie fibromusculaire sfr