Dla dynamicznej alokacji pamięci ilość pamięci w systemie nie ma większego znaczenia. Nie ma granicy powyżej której ma ona sens, a poniżej już nie. Wszystko zależy od zastosowań. Tu kolega alokuje niewielkie ilości pamięci i być może ma to sens. IMHO dynamiczna alokacja pamięci jest demonizowana - jeśli wszystko robi się jak należy to jest to tak samo...
w wielu jezykach programista jest zwolniony z tego zmartwienia przez standardowe biblioteki. podejrzewam, ze wlasnie jakies rozwiazanie podobne do przedstawionego przez Ciebie jest stosowane do rozwiazania tego problemu. jedyna optymalizacja, jaka mi przychodzi teraz do glowy, to dynamiczna modyfikacja rozmiaru "kesow". Np: kazdy nastepny "kes" dodawany...
Teraz pozostało mi przenieść projekt z stm32 na lm3s, ponieważ zajmuję się tym w wolnym czasie od pracy, to efektem podzielę się pewnie za kilka dni. To naprawdę nie jest dużo roboty, generalnie (pomijając detale typu zmiana nazw plików czy nazwy projektu) trzeba zrobić mniej więcej "aż" tyle: 1. poprawić tablicę wektorów (to i tak byś miał kiedyś...
W zasadzie tak nie należy robić. Dwie gwiazdki obok siebie to już jest podejrzane, a le trzy.... ;) Ale jeżeli chodzi tylko o gimnastykę z językiem C, to trzeba to zrobić tak: Dodano po 28 Tak, taka jest składania. Zmienna tablica wewnątrz funkcji funkcja() jest wskaźnikiem na zmienną tablica z funkcji main() . Trochę mylące jest użycie tej samej nazwy...
Ponieważ wskaźnik na tab[ww][kk] jest nieokreślony. [syntax=c]Matrix(int _w, int _k) : w(_w), k(_k) { int **tab = new int *[w]; for (size_t i = 0; i < w; i++) { tab[i] = new int [k]; // +++++++++++++++++ for (size_t j = 0; j < k; k++) { tab[i][j] = 0; } // +++++++++++++++++ } ObjectCount++; }[/syntax] [syntax=c]#include <iostream> class...
Tak, dobrze to pokazałeś. Najłatwiej sobie rozkminiać takie problemy w symulatorze. Masz na wszystko podgląd. Dodano po 3 Moim prywatnym zdaniem jednak używanie dynamicznej alokacji pamięci w uC, który tej pamięci ma pojedyncze KiB, jest pozbawione jakiegokolwiek sensu i jest proszeniem się o błędy. A jakie znaczenie ma ilość dostępnej pamięci? Jeśli...
Zgadza się :) To jest alokacja dynamiczna pamięci dla tablicy indices, ale na stosie, tzw. VLA. O ile pamiętam, napisane było też, aby stosować to do tablic o małym łącznym rozmiarze ;)
Poza tym po skompilowaniu Twojego kodu nie wyświetla średniej, która jednak musi być zawarta jako wynik działania programu. Wprowadź małą ilość, np 2 to zobaczysz że wypisze 3 punkty. http://ideone.com/VZ526V Pierwszy punkt wypisał się w wierszu z pytaniem, ostatni punkt to średnia.
Witam. Czy ktoś wie jak badać w runtime zajętość pamięci ?? Używam C++ i operatorów new/delete. Zakładam że obszar sterty i stosu jest przydzielany w taki sposób aby zminimalizować jego nałożenie się, czyli najprawdopodobniej na dwóch końcach pamięci RAM. Czy jest jakiś sprzętowy mechanizm ochrony tego obszaru ? Jak zbadać zajętość pamięci ?
Dlaczego w WinAVR nie działa kod: char *wskaznik; wskaznik=new char[20]; /* ... dzialania na wskazniku ... */ delete []wskaznik; wskaznik=NULL; Kompilator wyrzuca serie komunikatów zaczynając od `new' undeclared (first use in this function) Pisze programik w którym używam dużych tablic po 120-140 znaków. W pewnym momencie (po dodaniu kolejnej tablicy)...
Witam, może ktoś się orientuje jak to zrobić: 1)Jak korzystając z pamięci RAM można zrealizować funkcję boolowską 4 zmiennych?(najlepiej opis i przykład) 2)Projektowana jest kostka pamięci dynamicznej o pojemności 64MB. Ze względu na dążenie do minimalizacji liczby używanych końcówek przyjęto, że adres będzie przesyłany w dwóch częściach. Proszę zaproponować...
Witam. Mam wykonać polecenie: 'Stworzyć strukturę zawierającą dynamicznie zaalokowaną tablicę dwuwymiarową i jej wymiary. Tablica dwuwymiarowa jest reprezentowana przez odpowiedni wskaźnik.' Oprócz tego jeszcze zwolnić zaalokowaną pamięć. Oto co napisałem.. byłbym wdzięczny gdyby ktoś sprawdził czy dobrze to zrobiłem i ewentualnie pokazał mi błąd. #include...
iosteam na Atmega32? Nie do końca chyba rozumiem: jak przeczytałeś je i nigdzie jeszcze nie wrzuciłeś, to raczej już ich nie masz? A jak wrzuciłeś, to ciągle jeszcze potrzebujesz nowej pamięci dla nich? Prawidłowo, to chyba musisz mieć jeden bufor na najdłuższy łańcuch, a potem alokować dynamicznie miejsce na ten łańcuch i kopiować. Chyba, że chcesz...
Dynamiczna alokacja jest po to aby na sztywno nie rezerwować całego obszaru LCD tylko w zależności od potrzeb, jak ci się nie podoba rezerwacja dynamiczna powołaj tablice jako globalna i przekazuj funkcji. Ja nie narzekam na kod wszystko się fajnie analizuje. Dodano po 56 czyli jak dam +1 to też zadziała? Dodano po 15 A jeszcze jedna sprawa czy linia...
Poza stosem w SRAMie masz jeszcze przynajmniej: - stertę - dynamiczna alokacja (malloc, new) - sekcję data - wszelkie globalne i statyczne zmienne inicjowane jakąś wartością - sekcję bss - jw. ale zerowane przy starcie programu poza tym możesz sobie tworzyć własne sekcje, latać wskaźnikiem po pamięci i cokolwiek Ci przyjdzie do głowy. Alokowanie dużej...
Witam ! Mam sobie strukturę: struct xxx { int data1; void *pData2; char some_buffer[25]; int (*doAction)(int, int); }; i teraz: chcę zarezerwować pewną ilość miejsca, w samej strukturze, chodzi o to aby zarezerwowany obszar pamięci był ciągły i w wolnym miejscu tejże struktury, mogę wpisać inną strukturę. Np struct...
Rozbudowuję moją aplikację o dynamiczną alokacje pamięci - prosty stos FIFO. fifo.c Warning implicit declaration of function 'push' - jak to interpretować? kompilator myśli, że deklaruje po raz kolejny funkcje push? Na tym etapie z warningami, stos FIFO działa poprawnie. Kiedy próbuję dodać na początek pliku main.c , bibliotekę fifo.h , zaraz otrzymuje...
Witam! Kłaniaja sie wskaźniki do tablic! Mówiąc szczegółowo: chcesz inicjować tablice dwuwymiarowe; w związku z tym inicjujesz tablicę wskaźników do tablic n-wymiarowych, którym też musisz przydzielić pamięć! Zdrowych i wesołych świąt! KG
Wyłącz antywirusa i sprawdź czy tak samo laguje. Jeżeli program uruchamiasz pod Windowsem, to miej na uwadze że Windows pedantycznie troszczy się o ilość wolnej pamięci, alokując ją na dysku, zamiast w ram'ie, choć wolnego ramu jest jeszcze od groma. Jeżeli masz conajmniej 1GB ramu (dobra granica dla XP), to wyłączenie "pliku wymiany" na wszystkich...
Po pierwsze proponowałbym w strukturze już nie używać wskaźników tylko od razu tablic typu char o zadanej długości, bo alokacja pamięci dla każdego elementu struktury jest uciążliwa i może prowadzić do błędów. Poza tym w przypadku kopiowania ciągów znaków należy użyć funkcji strcpy() zdefiniowanej w pliku nagłówkowym strings.h. No i po trzecie, w definicja...
Szybka odpowiedź. Trzeba Ci wiedzieć jak działa procesor i Memory Management Unit (MMU). Działa tak, że buduje z kawałków pamięci fizycznej, pamięć wirtualną. Z kawałków o ustalonej długości, im mniejsze kawałki tym lepsza oszczędność pamięci ale większa tablica mapowania fizycznej pamięci na wirtualną i kupa innych kłopotów. Każda aplikacja porusza...
jeżeli masz listę jednokierunkową, to najpierw musisz odnaleźć element poprzedzający ten, który musisz usunąć. Resztę masz opisaną tu: http://www.elektroda.pl/rtvforum/topic90...
Co do powyższego to owszem, wskaźnik to po prostu komórka pamięci przechowująca adres do innej komórki, gdy dokonamy inkrementacji (++) lub dekrementacji (--) zmienimy zawartość wskaźnika, adres wskaźnika jest nadal ten sam. [syntax=c]int a[]={1, 2, 3}; int *b=&a; &a -operator adresu do zmiennej a ------------------------------------ Pamięć [0x00|0x01|0x02|0x03|0x04]...
Witam! A'propos "przytyku" Wszystko zawarłem w pierwszej odpowiedzi. Koledzy chyba posto-nabijacze ? A to fragment cytowanej, Twojej pierwszej odpowiedzi: 1. Pobierasz rozmiar tablicy przy użyciu scanf("%d", &rozmiar) zmienna rozmiar jest typu całkowitego. Skoro pobiera się rozmiar tablicy przy pomocy funkcji scanf od razu zakładam, że rozmiar tablicy...
Chodzi mi jak na stm zaimplementowałeś/skad wziales funkcje malloc/free.
Przy proggramowaniu niedużych mikrokontrolerów dynamiczna alokacja pamięci nie ma sensu. Więcej pamięci zmarnujesz w związku z alokacją, niż jej zaalokujesz, a ponadto: kto inny miałby korzystać z pamięci, której w danej chwili nie używa jeden proces i jaką masz pewność, że ten inny proces nie zechce zaalokować pamięci w tym samym czasie, co ten pierwszy?...
If addr is NULL, then the kernel chooses the address at which to create the mapping; Wystarczy czytać...
W takim razie pozostaje dynamiczna alokacja pamięci czyli opcja b. Język C++ oferuje operatory new i delete, natomiast w języku C pozostaje calloc, malloc, free i realloc.
Jak sam zauważyłeś, dynamiczna alokacja pamięci nie ma sensu we włącznikach światła i sterownikach windy. Nie będzie też miała sensu w zdalnym pilocie do bramy i w czajniku. Za to w systemie który jest podłączony do ethernetu i przyjmuje tyle połączeń na ile pozwoli mu dostępna aktualnie pamięć - czemu by nie? W sumie to nawet nie wiem po co dyskutuję...
Przecież istnieje coś takiego jak dynamiczna alokacja pamięci to raz a dwa to moja linijka przecież ma już znany rozmiar na etapie kompilacji.
BlueDraco Nie mogę się z tym zgodzić. Jakoś w każdym szanującym się RTOS'ie jest dostępna dynamiczna alokacja pamięci. Oczywiście jest to często źródło problemów ale takie ale są sytuacje gdzie bez dynamicznej alokacji nie da się zbyt wiele zdziałać. W rzeczywistości w duzych projektach dzięki dynamicznej alokacji jest więcej dostępnej pamięci ;)....
Dzięki Freddie! Po odblokowaniu __USES_CXX i pobraniu syscalls kontenery działają jak należy. Mam jednak jeszcze jedno male pytanko: chcialem użyć standardowej kolejki FIFO (std::queue) do której w main-e wrzucam jakaś wartość natomiast w przerwaniu ta wartość odczytuje. W którymś ze swoich postów pisałeś ze dynamiczna alokacja pamięci w przerwaniach...
Może nie ma miejsca na stercie i nadpisujesz stos, albo coś? Albo wskaźniki stosu i sterty są tak blisko siebie? Ogólnie działa Tobie dynamiczna alokacja pamięci (malloc)? Nigdy nie programowałem procesorów, nie znam tez architektury, ale spojrzałem szybko w kod i takie rzeczy mi się nasunęły.
Co do lock i unlock, to proponuję raczej sekcję krytyczną, chyba że alokujesz dynamicznie pamięci z kontekstu przerwania (to wtedy musi być blokada przerwań) lub nigdy nie wykorzystujesz selektywnego "zawieszania" tasków (wtedy może być suspend-all). Suspend all jest wywoływany w wewnętrznych funkcjach FreeRTOSa takich jak na przykład delay, więc lepiej...
No z tą teza w przypadku uK to bym polemizował. Dynamiczna alokacja jest dość karkolomnym, trudnym i niebezpiecznym narzędziem w przypadku uK. Bycie inżynierem zakłada myślenie. Jeśli mam szybką pamięć w MCU i wolniejszą dodatkową, a tak jest zazwyczaj w AVR, to nie ma sensu wszystkiego przekładać do tej wolniejszej. A już z pewnością nie ma sensu...
Oczywiście, masz rację. Jak będzie globalna ewentualnie zdefiniowana przez funkcję nadżędną - to tak jak mówiłeś, do funkcji przez wskaźnik. Rozwiązanie dosyć eleganckie, można taką tablicę wykorzystać w roli np.: bufora także do innych funkcji. Jak będzie statyczna - (oczywiście również masz rację) tu akurat chodzi mi o galsan, po prostu kod jest bardziej...
Wówczas takie programowanie przestaje się znacząco różnić od zwykłego C. Tia... a tworzenie zmiennych, zmienianie ich rozmiarów i dynamiczna alokacja pamięci są nawet prostsze (; Do niektórych zastosowań assembler ma sens, ale tych zastosowań jest coraz mniej - niestety lub stety - zależy co kto lubi. Ja początkowo uważałem, że assembler jest najlepszy...
Cześć, Została to wspomniana moja biblioteka do obsługi systemu plików ext2/3/4. Napisałem ta bibliotekę do własnych celów w zeszłym roku. Duża jej część bazuje na implementacji systemu operacyjnego HelenOS. Jednak trzeba było się trochę nagimnastykować aby odpalić ją na mikrokontrolerze ;). Biblioteka umożliwia obsługę: - ext2 (większość funkcjonalności)...
Temat rzeka. Przede wszystkim jaki język i jaki kompilator? Bo wiele z tych rzeczy kompilator potrafi robić automatycznie - np. inlinowanie funkcji, optymalizacja pętli itd. Nie ma sensu go w tym wyręczać. W takiej sytuacji należy się raczej zastanowić jak przekazać kompilatorowi wszystkie informacje o danej funkcji/bloku programu - np. w C atrybuty...
Oczywiście myślałem o sytuacji w której przechowujemy tylko wskaźnik do następnej pozycji, bez wskaźnika na dane - nie jest on potrzebny, gdyż dane są o stałej długości. Można to dodatkowo zoptymalizować, wykorzystując fakt, że na małych procesorkach do adresacji SRAM wystarczy tylko 8-bitów, można też zamiast adresu bezwzględnego przechowywać offset....
Kaj już kol (at)LChucki napisał - dynamiczna alokacja nie jest szczególnie dobrym pomysłem szczególnie jeżeli często alokujesz/zwalniasz. HardFault zostawia śladd na stosie i w rejestrach. Zobacz po prostu gdzie on wystąpił i co go spowodowało. https://mcuoneclipse.com/2012/11/24/debu... Albo zainstaluj sobie IDE, które...
Właśnie taką pisze, biblioteka napisana w C a oparta na pomyśle GTK+ (obiekty), obsługa touchscreen, widgety Androidowe. Biblioteka w stadium alpha, ale ładnie już działa, wymagania: - C - dobra znajomość: potrzebna aby połączyć bibliotekę z własnym LCD + własne prymitywy rysowania (info niżej) - fopen - doświadczenie w GTK+ może pomóc w chaosie zasad...
Statyczny atrybut raczej się tutaj nie nada, bo będzie współdzielony przez wszystkie obiekty klasy wektor. W ten sposób zmiany w wektorach jednej macierzy wpłyną na wszystkie wektory w innych macierzach - chyba nie o to tutaj chodzi. Tworząc tablicę obiektów: wektory = new wektor[ilosc] zawsze zostanie wywołany domyślny (bezparametrowy) konstruktor...
Prosiłbym chociaż o sprecyzowanie co jest bzdurą. Bo wogóle pierwszy malloc nie może brać rozmiaru 6*sizeof(int) ale 6*sizeof(struct bazadanych *) Faktycznie, pomyliłem się. Wrócę do problemu z dynamiczną alokacją przy tworzeniu listy. Zamieszczam tutaj skrócony kod w celu zwrócenia jedynie uwagi na utworzenie pierwszej komórki listy. [syntax=c]#include...
Nastukałem coś takiego. Może się przyda. #include <iostream> #include <fstream> using namespace std; const int buffSize = 1024; int main() { char buff[buffSize]; char **explode, explodeChar = ' '; int count = 0, explodeIndex = 0, tmpIndex = 0; fstream file("dane.txt", ios::in); file.getline(buff,...
Robiłem coś podobnego :) Przerób sobie co do sortowania po długości słowa to albo licz znaki w elemencie tablicy do napotkania \0 lub sizeof() i podziel przez rozmiar chara to otrzymasz ilość znaków w słowie z tablicy a później quick sortem i gotowe, dynamiczna alokacja pamięci jest czyli zależnie ile losuje liczb tyle rezerwuje się miejsca na tablicę...
O wskaźnikach kolega słyszał? Jak najbardziej słyszał i używał jednakże w tym przypadku wg. mnie wskaźnik będzie miał identyczne zastosowanie jak tablice. Potrzebny podwójny wskaźnik, który mógłby być zwracany z jakiejś funkcji, jednakże należy zauważyć, że wartości tablic są stałe, więc tworzenie wskaźnika, dynamiczna alokacja a następnie wypełnienie...
Musisz jednak być świadom co niesie za sobą przejście na C++. Wyjątki w c++ to duży nakład kodu (30kB lub nawet więcej) do tego dochodzi jeszcze RTTI, potrzeba implementacji alokacji pamięci itd, itp. Wszystko można włączyć/wyłączyć, jednak trzeba wiedzieć co i jak. Jeżeli masz do czynienia z opensource-em sprawa nie jest trywialna. Niekoniecznie....
(at)BlueDraco O jakim łańcuszku wywołań piszesz? Przecież wskaźnik wskazuje na obiekt, z jego VMT, która jest tworzona na etapie kompilacji. Jeśli masz wskaźnik na obiekt typu np. Primary, który ma VM, pokryte w obiekcie Secondary i wywołasz (Primary*)ptr->VM to wywoła się VM z Secondary, bo jej adres zostanie pobrany z VMT wskazywanego przez ptr....
Witam Mam problem z programem, ponieważ, nie mam pojęcia dlaczego się wysypuje, wszystko wygląda ok. Na razie program ma stworzyć 2 tablice, jedną z nich wyzerować i wyświetlić. Stosowałem calloc, ale też się program wysypuje. Proszę o pomoc Pozdrawiam [syntax=c]#include<stdio.h> #include<stdlib.h> #define SIZE_X 80 #define SIZE_Y 22 void...
Widziałem na jednym z forów, że ktoś pokazywał, że kod wygenerowany w C++ nie musi być wcale większy niż w C - ale trzeba już nieźle wiedzieć "o co chodzi", żeby dobrze sobie taki kod zoptymalizować. Jak się ma szybkość wykonywania takiego kodu w stosunku do C? To są wszystko mity... Kod w C++ zajmuje tyle ile musi zajmować - ciężko oczekiwać, że możesz...
Czy na pewno potrzebna jest ci dynamiczna alokacja pamięci? Rozważ poniższy przykład: [syntax=c]#include <stdio.h> int TABLICA[10][4]; void copy_tab(int dst[], int src[], int size) { for (int i = 0; i < size; i++) dst[i] = src[i]; } int main() { int TAB[4] = { 1, 2, 3, 4 }; copy_tab(TABLICA[3], TAB, 4); for (int i = 0; i < 4; i++) printf("TABLICA[3][%d]...
Nie ma takiej zależności. Jeśli nie korzystasz z dynamicznej alokacji pamięci to możesz to bardzo zgrubnie oszacować po ilości zmiennych automatycznych (lokalnych), a szczególnie tablic. To co czyni takie oszacowanie szczególnie trudnym to określenie stopnia zagnieżdżenia funkcji - bo to zajmuje sporo pamięci na stosie. A zależy to od ilości przerwań,...
A możecie mi jeszcze powiedzieć jak ustawić: HeapSize, CSTACK i RSTACK, bo coś chyba zamieszałem i mi się zawiesza KIT?? Nie ma na to prostej odpowiedzi. CSTACK to w zależności od tego ile najwięcej zmiennych lokalnych musi być przechowywana naraz. Zdaje sie że też wchodzą do niego zmienne typu STATIC i tym podobne. RSTACK służy do przechowywania adresów...
Witam , mam problem z przekształceniem programu aby tablice byly utworzone w pamieci dynamicznej. Jak ktos mial by jaks pomysl albo podpowiedział co i jak bede wdzięczny. (program prosty ma dodawać dwie macierze do siebie) [syntax=csharp] #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int tab1[0][0]; int tab2[0][0];...
stm32 dynamiczna alokacja pamięci dynamiczna alokacja alokacja dynamiczna
kamera 500zł sterownika pompy centralnego sprzedam głośnikowe
pralka hotpoint ariston partner tepee
Uszkodzona pompa Wilo - diagnostyka i naprawa Sprzęgło w starszych koparkoładowarkach JCB 3CX