|
Programiranje Java, Perl, VB, ASP, .NET, C, C++, Pascal, Delphi Sponzor: |
|
Alati teme | Način prikaza |
|
19. 12. 2010. | #1 |
smezuljak
Datum učlanjenja: 17.01.2010
Lokacija: Smederevo
Poruke: 3
Hvala: 1
0 "Hvala" u 0 poruka
|
C++, alociranje memorije za strukturu
Imam jedan od onih problema o kojima guglaš po' sata a nigde ne možeš da nađeš rešenje.. Koristim DevCpp i puca kada se alocira veća memorija. A vrrrrrrlo mi je neophodna.
Prolazi: Kôd:
struct pix { unsigned char B, G, R; } pic[800][800]; Kôd:
struct pix { unsigned char B, G, R; } pic[900][900]; Kôd:
struct pix { unsigned char B, G, R; } pic[800][800], pic2[800][800]; Kôd:
struct pix { unsigned char B, G, R; int abc; } pic[800][800]; Kako alocirati više memorije?
__________________
Šta mi vredi što sam pametan kad imam posla sa budalama? |
19. 12. 2010. | #2 |
VD IT Direktora
Invented the damn thing
Datum učlanjenja: 08.06.2005
Lokacija: Beograd
Poruke: 2.118
Hvala: 503
1.307 "Hvala" u 282 poruka
|
Pretpostavljam da to pokušava da alocira na steku, a izgleda da je limit na cygwin 2Mb.
Povećaj stack size ili, bolje, alociraj dinamički.
__________________
blog Poslednja izmena od jablan : 19. 12. 2010. u 20:45. |
20. 12. 2010. | #3 |
profesionalac
Qualified
Datum učlanjenja: 22.09.2007
Lokacija: Split
Poruke: 111
Hvala: 8
39 "Hvala" u 10 poruka
|
Ja imam još jedno pitanje u vezi ovoga.
Zanimam me kako se može saznati koiko se može alocirati na steku ili u slobodnom prostoru(dinamički) ? Znači kako ja mogu uopće znati koliko mi je još MB dostupno za alociranje ? predpostavljam da OS se brine oko toga koliko će kome dati i koliko još tko ima, ali kako ja mogu doći do tih informacija ? |
20. 12. 2010. | #4 |
VD IT Direktora
Invented the damn thing
Datum učlanjenja: 08.06.2005
Lokacija: Beograd
Poruke: 2.118
Hvala: 503
1.307 "Hvala" u 282 poruka
|
Nisam 100% siguran da li postoje pozivi koji ti to vraćaju. Što se tiče steka, pogledaj ovde:
Kôd:
jablan@poneti:~$ ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 20 file size (blocks, -f) unlimited pending signals (-i) 16382 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) unlimited virtual memory (kbytes, -v) unlimited file locks (-x) unlimited Uostalom, javiće se već neki ETF-ovac da pojasni stvari...
__________________
blog |
20. 12. 2010. | #5 |
dinosaurus
Master
Datum učlanjenja: 29.12.2005
Lokacija: Nova Engleska
Poruke: 636
Hvala: 79
263 "Hvala" u 66 poruka
|
Пар ствари:
1) DevCpp је мање-више мртав. Ако хоћеш неки IDE за gcc под Виндоузом, погледај Code::Block. 2) Ако већ користиш C++ (код који си показао може да буде и С), лепо скини готову библиотеку за матрице (предлажем ову: http://www.boost.org/doc/libs/1_39_0...doc/matrix.htm ) и нема да те боли глава. 3) Веруј ми да не желиш да се бакћеш са проверама величине стека. Ако имаш иоле велику структуру података, мораћеш да је креираш на хипу. Лепота код С++а је што постоје класе (као нпр матрица коју сам ти препоручио) које ти омогуће да креираш објекат на стеку а он интерно алоцира и деалоцира меморију са хипа колико му треба. |
20. 12. 2010. | #6 |
dinosaurus
Master
Datum učlanjenja: 29.12.2005
Lokacija: Nova Engleska
Poruke: 636
Hvala: 79
263 "Hvala" u 66 poruka
|
Чисто информације ради: на Линуксу то најчешће није случај. Тамо malloc увек врати поинтер који није нула и онда тек кад га дереференцираш он прсне. Више о томе: http://linux.die.net/man/3/malloc
|
21. 12. 2010. | #7 | |
profesionalac
Qualified
Datum učlanjenja: 22.09.2007
Lokacija: Split
Poruke: 111
Hvala: 8
39 "Hvala" u 10 poruka
|
Citat:
I to me zbunjuje jer i mnogim knjiga piše da je. Evo što sam otkrio. Prvo kod kompajiram sa g++ na RHEL sa: [sasa@localhost my_code]$ g++ test.cpp -g -o test && ./test Napisao sam sljedeći code: Kôd:
#include <iostream> int main(int argc, char *argv[]) { double * array; array = NULL; printf("PRVI ALLOC\n"); array = new double[1000000000]; if( NULL == array ) { printf("Nije uspio alocirati.\n"); } } Kôd:
[sasa@localhost my_code]$ g++ test.cpp -g -o test && ./test PRVI ALLOC terminate called after throwing an instance of 'std::bad_alloc' what(): St9bad_alloc Aborted Kôd:
#include <iostream> int main(int argc, char *argv[]) { double * array; array = NULL; printf("PRVI ALLOC\n"); try { array = new double[1000000000]; } catch( std::bad_alloc ) { printf("array ALOCIRANJE NIJE USPIJELO\n"); exit( -5 ); } catch(...) { printf("NESTO NIJE USPIJELO\n"); } } Kôd:
[sasa@localhost my_code]$ g++ test.cpp -g -o test && ./test PRVI ALLOC array ALOCIRANJE NIJE USPIJELO Iz ovoga moga eksperimenta je jasno da je to koncept koji više ne funkcionira. Mene sada zanima, od kada se to izmjenilo? I ako netko ima još kakvih dodatnih informacija može ih iznjeti u vezi ove tematike. |
|
20. 12. 2010. | #8 |
VD IT Direktora
Invented the damn thing
Datum učlanjenja: 08.06.2005
Lokacija: Beograd
Poruke: 2.118
Hvala: 503
1.307 "Hvala" u 282 poruka
|
^ Koliko kapiram, nije da nikad ne vraća NULL, već ponekad ne vrati NULL iako nema garancije da je to i alocirao?
Off Topic: BTW, čovek Splićanin, a ti razvezao ćirilicom...
__________________
blog |
20. 12. 2010. | #9 | |
dinosaurus
Master
Datum učlanjenja: 29.12.2005
Lokacija: Nova Engleska
Poruke: 636
Hvala: 79
263 "Hvala" u 66 poruka
|
Citat:
Поента је да не можеш да рачунаш на то да ће malloc да му врати NULL. Off Topic: BTW, čovek Splićanin, a ti razvezao ćirilicom... Упс. Ево лека: Microsoft Transliteration Utility Мада, ако је већ кренуо да учи С++, ћирилица му је најмањи проблем |
|
20. 12. 2010. | #10 | |
VD IT Direktora
Invented the damn thing
Datum učlanjenja: 08.06.2005
Lokacija: Beograd
Poruke: 2.118
Hvala: 503
1.307 "Hvala" u 282 poruka
|
Citat:
http://www.benya.com/cyrillic/tocyrillic/#bookmarklets
__________________
blog |
|
|
|