Chirurgia endoscopică a hipofizei
"Standardul de aur" în chirurgia hipofizară îl reprezintă endoscopia transnazală transsfenoidală. Echipa NeuroHope este antrenată în unul din cele mai mari centre de chirurgie a hipofizei din Europa, Spitalul Foch din Paris, centrul în care a fost introdus pentru prima dată endoscopul în chirurgia transnazală a hipofizei, de către neurochirurgul francez Guiot. Pe lângă tumorile cu origine hipofizară, prin tehnicile endoscopice transnazale pot fi abordate numeroase alte patologii neurochirurgicale. www.neurohope.ro |
pointeri
Last Updated: Dec 08 2019 22:37, Started by
vali38
, Jun 25 2010 18:56
·
0
#1
Posted 25 June 2010 - 18:56
pana acum s-a tot discutat de pointeri insa eu nu reusesc sa ii inteleg, chiar si cu atatea materiale in fata
pentru intelegerea lor sigur m-ar ajuta foarte mult sa inteleg cand se folosesc si pentru ce ? pe langa asta vreau sa stiu de ce optam pentru pointeri si sa nu folosim programarea in stil clasic ? |
#3
Posted 25 June 2010 - 19:08
Un pointer este un indicator catre o zona de memorie de unde vrei sa citesti sau sa scrii date. Nu prea se mai folosesc in limbajele de nivel inalt de la ora actuala (gen Visual Basic .NET, C#) asa ca nu va bateti capul cu ei.
|
#4
Posted 25 June 2010 - 19:09
Un exemplu, vrei sa faci o lista simplu inlantuita.
Vei stoca fiecare element in memorie si fiecare element va contine adresa spre urmatorul. Ca sa parcurgi lista si sa citesti informatia din ea n-o sa ai nevoie decat de un pointer la memoria unde incepe primul element si de acolo mergi din aproape in aproape, nu ti cate o variabila pentru fiecare element. Edited by dani.user, 25 June 2010 - 19:11. |
#5
Posted 25 June 2010 - 19:31
dani.user, on 25th June 2010, 20:09, said: Un exemplu, vrei sa faci o lista simplu inlantuita. Vei stoca fiecare element in memorie si fiecare element va contine adresa spre urmatorul. Ca sa parcurgi lista si sa citesti informatia din ea n-o sa ai nevoie decat de un pointer la memoria unde incepe primul element si de acolo mergi din aproape in aproape, nu ti cate o variabila pentru fiecare element. iar fata de un vector, o lista are dimensiune varibila (chiar daca in Java exista vectori cu dimensiuni varibile), si lista inlantuita ocupa atatea memorie cate elemente ai, un vector cand va fi initializat va avea un numar fix de elemente si memoria va fi rezervata din start. |
#6
Posted 25 June 2010 - 19:42
#7
Posted 26 June 2010 - 11:56
dani.user, on 25th June 2010, 20:09, said: Un exemplu, vrei sa faci o lista simplu inlantuita. Vei stoca fiecare element in memorie si fiecare element va contine adresa spre urmatorul. Ca sa parcurgi lista si sa citesti informatia din ea n-o sa ai nevoie decat de un pointer la memoria unde incepe primul element si de acolo mergi din aproape in aproape, nu ti cate o variabila pentru fiecare element. imi poti arata un exemplu si care este diferenta ? webulxpert, on 25th June 2010, 20:31, said: iar fata de un vector, o lista are dimensiune varibila (chiar daca in Java exista vectori cu dimensiuni varibile), si lista inlantuita ocupa atatea memorie cate elemente ai, un vector cand va fi initializat va avea un numar fix de elemente si memoria va fi rezervata din start. imi poti explica ce se intampla un cazurile urmatoare ? int a[100000]; si int *a;in primul caz, vectorul meu va ocupa memoria pentru cele 100000 de pozitii ? in cazul al doilea, memoria va fi ocupata in timp ce completez vectorul ? completarea este corescta daca o fac in felul acesta: a[1520]=12349 ? neagu_laurentiu, on 25th June 2010, 20:42, said: "Clasic" inseamna ca alocarea se face pe stiva. Stiva nu-i memoria calculatorului. Tu vrei sa aloci in memoria mare a calculatorului. |
#8
Posted 26 June 2010 - 12:06
In primul caz memoria se aloca pe stiva, care e limitata (deobicei cativa MB).
In al doilea caz, cu int *a tu doar aloci 4 bytes pentru o variabila de tip pointer. Ca sa faci un vector de exemplu trebuie sa-i aloci memorie. Sa zicem ca vrei pentru 100 de elemente: int *a = (int*)malloc(100*sizeof(int));Dupa ce umplii aceste 100 de elemente, s-ar putea sa mai vrei sa introduci inca 500. Ce faci? Aloci o bucata mai mare de memorie pentru 100+500=600 elemente si copiezi primul bloc de 100 de elemente la inceputul blocului nou alocat. Neaparat sa golesti memoria alocata initial pentru 100 de elemente. int *b = (int*)malloc(600*sizeof(int)); memcpy(b,a,100*sizeof(int)); free(a); a = b; Edited by dani.user, 26 June 2010 - 12:09. |
#9
Posted 26 June 2010 - 13:17
Dar e posibil sa nu poti gasi o zona continua de memorie unde sa-ti incapa cele 600 elemente (unele langa altele). In schimb ai zone de memorie, dispersate, ce ar putea stoca acele elemente (nu-s unele langa altele). Exact aici lista aia inlantuita e utila. Ea stocheaza toate elementele, dar nu pune conditia ca memoria sa fie un bloc continuu, unitar.
600 e de exemplu. Vorbim de o cantitate mult mai mare. Edited by neagu_laurentiu, 26 June 2010 - 13:18. |
#10
Posted 26 June 2010 - 13:20
asta inseamna ca voi putea stoca in memorie pana aceasta se va umple ?
|
|
#11
Posted 26 June 2010 - 13:21
Da. Insa limita disponibila tie, sub Windows pe 32 biti (x86), e de 2Gb per program (3Gb dupa mici modificari in sistem).
|
#12
Posted 26 June 2010 - 13:31
legat de memorie. am incercat sa execut codul urmator si cand memoria se umple aproape 47% se opreste si imi apare "segmentation fault". sistemul de operare este ubuntu. problema vine din partea OS ?
int main(){ int *a=(int*)malloc(99999999999*sizeof(int)); for(int i=1;i<=99999999999;i++){ a[i]=i; } cout<<"ok"; return 0; } |
#13
Posted 26 June 2010 - 13:34
Un alt exemplu. Vrei sa deschizi o poza. Tu nu sti dinainte cat de mare va fi acea poza. Deschizi fisierul, citesti headerul, vezi ca poza e in format 3000x2000 la 24bit/pixel, aloci frumos 3000x2000x3 = 18000000 bytes memorie, si incepi sa citesti fiecare pixel si sa il stochezi in memorie.
Problema vine din partea ta ca vrei sa aloci multi gb de memorie (care nici nu incap intr-un numar intreg pe 32 bit) Edited by dani.user, 26 June 2010 - 13:38. |
#14
Posted 26 June 2010 - 13:34
Pai cat face 99999999999 * 4 si ce am zis eu de limita de 2Gb ?
|
#15
Posted 26 June 2010 - 13:45
mi-am dat seama unde era problema. ca sa invat mai bine sa lucrez cu pointeri, ce mi-ati recomanda sa fac ?
|
|
#16
Posted 26 June 2010 - 13:52
Acum o sa intelegi de ce a aparut arhitectura pe 64 biti (limita e la 2 ^ 64) si cand e utila.
Eu zic ca sunt destule explicatii pe net, cu poze cu tot, despre pointeri. char* p = (char* ) 0xFF78AD59; Poti descrie ce face acel cod ? |
#17
Posted 26 June 2010 - 13:56
vali38, on 25th June 2010, 18:56, said: pana acum s-a tot discutat de pointeri insa eu nu reusesc sa ii inteleg, chiar si cu atatea materiale in fata pentru intelegerea lor sigur m-ar ajuta foarte mult sa inteleg cand se folosesc si pentru ce ? pe langa asta vreau sa stiu de ce optam pentru pointeri si sa nu folosim programarea in stil clasic ? |
#18
Posted 26 June 2010 - 14:00
neagu_laurentiu, on 26th June 2010, 14:52, said: Acum o sa intelegi de ce a aparut arhitectura pe 64 biti (limita e la 2 ^ 64) si cand e utila. Eu zic ca sunt destule explicatii pe net, cu poze cu tot, despre pointeri. char* p = (char* ) 0xFF78AD59; Poti descrie ce face acel cod ? |
Anunturi
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users