1 dynamiczny przydział pamięci malloc() free() realloc() calloc() memset() memcpy( ) mempcpy( ) memmove() (wskaźniki!! )

Slides:



Advertisements
Podobne prezentacje
Ćwiczenie (1) Dostosuj poniższy program do potrzeb zdefiniowanych w treści programu zaliczeniowego: #include void dodaj(){}; void edytuj(){}; void usun(){};
Advertisements

Język C/C++ Funkcje.
Wstęp do programowania
Funkcje standardowe (1)
Klasa listy jednokierunkowej Przekazywanie parametrów do funkcji
Standardowa biblioteka języka C++
Programowanie obiektowe
Wskaźniki repetytorium Wskaźniki int Y = 1, X = 2; X = 5; int *p = &X; Y X p 4 4 p = &Y; *p = 4; 5.
1 Wskaźniki w C Podstawy podstaw podstaw podstaw.....
Prowadzący: mgr inż. Elżbieta Majka
Systemy rozproszone W. Bartkiewicz
dynamiczny przydział pamięci
Opisy funkcji Adres strony WWW : html /html_node/libc_528.html.
argumenty wiersza poleceń: getopt
Dziel – Rządź - Złącz.
Uzupełnienie dot. przekazywania argumentów #include struct nowa { int f; char line[20000]; int k; } reprezentant; int main() { void funkcja7( struct nowa.
Zaawansowana obsługa sygnałów
Zakres i zasięg deklaracji Zakres : obszar programu, w którym identyfikator może być użyty zakres globalny : cały program zakres lokalny : definicja pojedynczej.
Język C – Część II Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie do informatyki.
Wskaźniki. Definiowanie wskaźników Wskaźnik może wskazywać na obiekt dowolnego typu. int * w; char * Wsk_Znak; float * Wskaz_Real; Przykłady: Wskaźnik.
Tablice.
Programowanie w C Wykład 3
Wykład 1: Wskaźniki Podstawy programowania Programowanie w C
PRZEPEŁNIENIE BUFORA B u f f e r O v e r f l o w
Instytut Fizyki Teoretycznej
Język ANSI C Operacje we/wy
Zachodniopomorskie Centrum Edukacyjne Zadanie domowe.
#include #include main () { cout
Semafory według normy POSIX
Procesy odrębne –Unikatowy PID ( ) –Zmienne –Zbiory deskryptorów plików –Przestrzeń stosu (lokalne zmienne, wywołania funkcji) –Środowisko –Licznik.
Programowanie obiektowe W2
Pamięć wspólna Opis własnego rozwiązania Marcin Kamiński, Michał Kotra Wydział EAIiE Katedra Automatyki Kraków, 2008.
nowe operatory & . (kropka) * operator rzutowy -> , (przecinek)
Podstawy programowania II
Podstawy programowania II Wykład 2: Biblioteka stdio.h Zachodniopomorska Szkoła Biznesu.
Podstawy informatyki (4)
Podstawy informatyki 2013/2014
Wskaźnik może wskazywać na obiekt dowolnego typu. int * w; char * Wsk_Znak; float * Wskaz_Float; Przykład: Wskaźnik przechowuje adres obiektu wskazanego.
GOSPODARKA PAMIĘCIĄ, STRUMIENIE (i nie tylko)
Jerzy F. Kotowski1 Informatyka I Wykład 11 STRUKTURY I UNIE.
Procedury i funkcje.
Przekazywanie argumentów
Podstawy programowania
sortowanie na bazie – wykorzystanie sortowania ze zliczaniem
Automatyka i Robotyka Systemy czasu rzeczywistego Wykład 4.
Programowanie obiektowe III rok EiT dr inż. Jerzy Kotowski Wykład VIII.
Jerzy F. Kotowski1 Informatyka I Wykład 14 DEKLARATORY.
Informatyka I Wykład 4 Stałe Stałe liczbowe Stałe znakowe Stałe tekstowe Jerzy Kotowski Politechnika Wroclawska var = 5L - 0xA; -5.
Programowanie obiektowe Wykład 3 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Dariusz Wardowski.
jeszcze dygresja o macierzach...
Kurs języka C++ – wykład 3 ( )
Programowanie strukturalne i obiektowe C++
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski 1 informatyka +
Podstawy programowania II Wykład 3: Obsługa plików w stdio.h.
Kurs języka C++ – wykład 4 ( )
K URS JĘZYKA C++ – WYKŁAD 1 ( ) Łagodne wprowadzenie do języka C++
Modele pamięci Tiny - mikroskopijny do 64 K zmienne inicjalizowane kod programu zmienne nie inicjalizowane HEAP (sterta) obszar wolny STACK (stos) Model.
1 Uzupełnienie dot. przekazywania argumentów #include struct nowa { int f; char line[20000]; int k; } reprezentant; int main() { void funkcja7( struct.
PO13-1 / 19 Wykład 13 Wyjątki i ich zgłaszanie Wyłapywanie wyjątków Obsługa wyjątków Wykorzystanie polimorfizmu Filtrowanie wyjątków Błędy w konstruktorach.
1 Opisy funkcji Adres strony WWW : html (należy odszukać hyperlink Function Index) (
1 Czy procesor musi się grzać? Np. dodawanie 2 liczb 1-bitowych. Możliwych stanów początkowych: cztery Możliwych stanów końcowych: dwa to można opisać.
Proceduralne Języki Programowania Patryk Jasik Katedra Fizyki Teoretycznej i Informatyki Kwantowej Wydział Fizyki Technicznej i Matematyki Stosowanej Politechnika.
Czy procesor musi się grzać?
Wskaźniki Elżbieta Labocha.
PODSTAWY INFORMATYKI Wykład 6.
PODSTAWY INFORMATYKI Wykład 4.
Opisy funkcji Adres strony WWW :
Uzupełnienie dot. przekazywania argumentów
nowe operatory & . (kropka) * operator rzutowy -> , (przecinek)
dynamiczny przydział pamięci
Zapis prezentacji:

1 dynamiczny przydział pamięci malloc() free() realloc() calloc() memset() memcpy( ) mempcpy( ) memmove() (wskaźniki!! )

2 dynamiczny przydział pamięci void * memccpy (void * to, void * from, int c, int size) funkcja kopiuje nie więcej niż size bajtów z miejsca wskazywanego przez from do miejsca wskazywanego przez to, zatrzyma się jeśli napotka bajt zgodny z c; zwraca wskaźnik do miejsca docelowego jeden bajt za miejscem gdzie c zostało skopiowane; jeśli błąd, to zwraca wskaźnik NULL

3 dynamiczny przydział pamięci #include void * wsk; char a[7]={'0','1','2','3','4','5','6'}; char b[7]={'a','b','c','d','e','f','g'}; int main() { int n; printf("\n a[2]=%1c b[2]=%1c\n", a[2], b[2] ); wsk = (void *) memccpy(b, a, (int)'3', 10);

4 dynamiczny przydział pamięci for(n=0;n<=10;++n) { printf(" %c",b[n]); } printf("\n *wsk=%c\n", *((char*)wsk) ); exit(0); }/* koniec main */

5 dynamiczny przydział pamięci a[2]=2 b[2]=c e f g *wsk=e

6 pointerb.c Przypomnienie : to, że wskaźnik wskazuje na jakiś adres nie gwarantuje tego, że pod tym adresem przechowywane jest coś sensownego z punktu widzenia wykonującego się programu. Przykładowy program: np. pointerb.c, (wystarczy np., że wskaźnik został załadowany adresem zmiennej, której czas życia minął, gdyż była zmienna klasy auto w jakiejś funkcji)

7 ile pamięci zaalokował malloc? jak uzyskać informację? #include struct mallinfo alex; alex=mallinfo ( ); /* wywołanie funkcji */ /* alex.arena alex.hblkhd całkowita ilość pamięci w bajtach alokowana przez malloc przez sbrk oraz przez mmap */

8 struct mallinfo Malloc.html int arena This is the total size of memory allocated with sbrk by malloc, in bytes. int ordblks This is the number of chunks not in use. (The memory allocator internally gets chunks of memory from the operating system, and then carves them up to satisfy individual malloc requests) int smblks This field is unused. int hblks This is the total number of chunks allocated with mmap.

9 struct mallinfo Malloc.html hblks This is the total number of chunks allocated with mmap. int hblkhd This is the total size of memory allocated with mmap, in bytes. int usmblks This field is unused. int fsmblks This field is unused.

10 struct mallinfo Malloc.html int uordblks This is the total size of memory occupied by chunks handed out by malloc. int fordblks This is the total size of memory occupied by free (not in use) chunks. int keepcost This is the size of the top-most releasable chunk that normally borders the end of the heap (i.e. the high end of the virtual address space's data segment).

11 struct mallinfo, mallinfo() przykład użycia #include /* przykład mallinfo () */ #include

12 struct mallinfo, mallinfo() przykład użycia #include /* przykład mallinfo () */ #include

13 struct mallinfo, mallinfo() przykład użycia struct st { float buf[1000*1000*10]; } *p1; struct mallinfo alex; main() {/* w tej funkcji main jest użyta funkcja mallinfo */

14 struct mallinfo, mallinfo() przykład użycia while(1) { p1=malloc( sizeof(struct st) ); if(p1==NULL) { printf("..brak pamieci..\n"); break; } alex=mallinfo(); printf("\n main alex.arena=%d alex.ordblks=%d alex.hblks=%d", alex.arena, alex.ordblks, alex.hblks); printf("\n alex.hblkhd=%u alex.uordblks=%d", alex.hblkhd, alex.uordblks); printf("\n alex.fordblks=%d alex.keepcost=%d\n", alex.fordblks, alex.keepcost); printf("\n"); } } /* koniec funkcji main */

15 struct mallinfo, mallinfo() przykład użycia main alex.arena=0 alex.ordblks=1 alex.hblks=1 alex.hblkhd= alex.uordblks=0 alex.fordblks=0 alex.keepcost= main po alex.arena=0 alex.ordblks=1 alex.hblks=12 alex.hblkhd= alex.uordblks=0 alex.fordblks=0 alex.keepcost= (aż w końcu program wypisze)..brak pamieci..

16 argumenty wiersza poleceń funkcja main ma dwa argumenty main(int argc, char * argv [ ] ) (tak sa zwyczajowo nazywane, choć nie są to nazwy obowiązujące)

17 argumenty wiersza poleceń #include int main (int argc, char *argv[] ) /* albo int main( int argc, char **argv) */ { int n; for(n=0;n<argc; ++n) { printf("\n n=%d param= %s",n, argv[n]); printf("\n to samo... n=%d param= %s",n, *(argv+n) ); printf("\n"); } exit(0); } /* koniec funkcji main */

18 argumenty wiersza poleceń: getopt #include /* getopt2.c */ #include #include /* niezbędne */ int main(int argc, char *argv[]) { int n; int opt;

19 argumenty wiersza poleceń: getopt printf("\n argc=%d\n",argc); for(n=0;n<argc;++n) { printf(" *argv[%d] %s\n",n, argv[n]); } printf("\n");

20 argumenty wiersza poleceń: getopt while( (opt=getopt(argc,argv,"a:b:")) != -1 ) { switch (opt) { case 'a' : printf("case \'a\'\n"); printf(" optarg=%s=\n",optarg); break; case 'b' : printf("case \'b\'\n"); printf(" optarg=%s=\n",optarg); break; } } /* koniec while */ } /* koniec main */

21 argumenty wiersza poleceń: getopt przykład: a.out -a45 -b789 argc=3 *argv[0] a.out *argv[1] -a45 *argv[2] -b789 case 'a' optarg=45= case 'b' optarg=789=