Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Memoria conventionala

c



+ Font mai mare | - Font mai mic



Memoria conventionala

Primul PC compatibil IBM utiliza de obicei intre 64Kb si 256Kb memorie RAM (Read Only Memory). Pe atunci aceasta memorie era mai mult decat suficienta. Astazi, memoria conventionala a unui PC este formata din primul 1Mb de RAM. Programele DOS ruleaza, in mod obisnuit, cu primii 640Kb de memorie conventionala. PC-ul utilizeaza restul de 384Kb de memorie (numita memorie rezervata sau memorie superioara) pentru memoria video a calculatorului, driverele de dispozitive, alte dispozitive HARD mapate in memorie si BIOS (Basic Input-Output Services - servicii intrare-iesire de baza).



Sistemul de operare Windows utilizeaza modelul de memorie virtuala pentru a gestiona memoria, ceea ce inseamna ca eliberarea memoriei conventionale nu are semnificatie sub acest sistem de operare. Insa, memoria conventionala este importanta cand se ruleaza programe in cadrul unei ferestre DOS sub Windows.

Structura memoriei conventionale a unui calculator personal este urmatoarea:

BIOS ROM

Memorie rezervata

Memorie video

COMMAND.COM

Memorie pentru programe

Intrari CONFIG.SYS

Nucleul DOS

Zona de comunicatii BIOS

Vectori de intrerupere BIOS

PC-ul imparte memoria in blocuri de 64Kb numite segmente. In mod obisnuit, programul utilizeaza un segment de cod (ce contine instructiunile programului) si un al doilea segment de memorie pentru date. Daca un program este foarte mare compilatorul va trebui sa dispuna de mai multe segmente de cod sau de date, sau de ambele. Modelul de memorie defineste numarul de segmente pe care le poate folosi pentru fiecare. Modele sunt foarte importante deoarece, daca se utilizeaza un model de memorie necorespunzator, programul poate sa nu detina suficienta memorie pentru executie. Compilatorul va alege un model de memorie suficient de mare pentru a rula programul, insa cu cat memoria utilizata este mai mare cu atat viteza de executie a programului scade. Din aceasta cauza trebuie ales modelul cel mai mic pentru necesitatile programului. Majoritatea compilatoarelor accepta urmatoarele modele de memorie:

a)      tiny - combina datele si codul programului intr-un singur segment de 64Kb (este cel mai mic si mai rapid model de memorie);

b)      small - utilizeaza un segment de memorie pentru cod si un segment pentru date (este cel mai obisnuit model de memorie);

c)      medium - utilizeaza un segment de 64Kb pentru date si doua sau mai multe segmente pentru codul programului. In acest caz datele sunt accesate rapid prin utilizarea de adrese near, in schimb insa, apelurile de functii se fac utilizand adrese far;

d)      compact - aloca un segment de 64Kb pentru codul programului si doua sau mai multe segmente pentru date (este un model utilizat pentru programe mici ce manipuleaza un numar mare de date);

e)      large - aloca mai multe segmente atat pentru date cat si pentru cod si este cel mai lent model de memorie din cele prezentate pana acum. El trebuie utilizat doar ca ultima resursa;

f)        huge - este un model utilizat doar in cazul utilizarii unor matrici mai mari de 64Kb. Pentru a stoca o astfel de matrice programul trebuie sa utilizeze cuvantul cheie huge pentru a crea un pointer, astfel:

int huge *matrice_uriasa

dupa care programul trebuie sa utilizeze functia halloc pentru alocarea memoriei si functia hfree pentru eliberarea acesteia. Exemplul urmator aloca o matrice de 400000 octeti:

Exemplu:

#include <stdio.h>

#include <malloc.h>

void main(void)

Pentru selectarea unui anumit model de memorie se include, de regula, o optiune in cadrul liniei de comanda a compilatorului. Majoritatea compilatoarelor predefinesc o constanta specifica pentru a determina modelul curent de memorie. In tabelul urmator sunt prezentate aceste constante definite de compilatoarele Microsoft C si Borland C:

Model de memorie

Microsoft C

Borland C

Small

M_I86SM

_SMALL_

Medium

M_I86MM

_MEDIUM_

Compact

M_I86CM

_COMPACT_

Large

M_I86LM

_LARGE_

Programul poate verifica modelul de memorie utilizat folosind urmatoarea secventa de instructiuni:

#ifndef _MEDIUM_

printf("Programul cere modelul de memorie mediumn");

exit(1);

#endif

Atunci cand un program trebuie sa aloce memorie in mod dinamic se utilizeaza fie functia malloc pentru a aloca memorie din zona near (din segmentul curent), fie functia fmalloc pentru a aloca memorie far.



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 730
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved