DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   Programiranje (http://www.devprotalk.com/forumdisplay.php?f=23)
-   -   C++, alociranje memorije za strukturu (http://www.devprotalk.com/showthread.php?t=9477)

smez 19. 12. 2010. 17:50

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];

A treba mi, i ne prolazi:
Kôd:

struct pix {
        unsigned char B, G, R;
} pic[900][900];

Takođe ne prolazi ni:
Kôd:

struct pix {
        unsigned char B, G, R;
} pic[800][800], pic2[800][800];

A čisto da se uporedi sa prvim ne prolazi ni:
Kôd:

struct pix {
        unsigned char B, G, R;
        int abc;
} pic[800][800];

Kad kažem "ne prolazi" to znači da puca pri startovanju, neće da se pokrene.

Kako alocirati više memorije?

jablan 19. 12. 2010. 19:43

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.

misko_ 20. 12. 2010. 07:48

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 ?

jablan 20. 12. 2010. 10:20

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

Što se hipa tiče, nisam primetio da stdlib.h nudi neku odgovarajuću funkciju. Međutim, uvek možeš da "napipaš" vrednost polovljenjem intervala, pošto malloc vraća NULL ako ne uspe da alocira zadatu veličinu.

Uostalom, javiće se već neki ETF-ovac da pojasni stvari... ;)

Dragi Tata 20. 12. 2010. 16:14

Пар ствари:

1) DevCpp је мање-више мртав. Ако хоћеш неки IDE за gcc под Виндоузом, погледај Code::Block.

2) Ако већ користиш C++ (код који си показао може да буде и С), лепо скини готову библиотеку за матрице (предлажем ову: http://www.boost.org/doc/libs/1_39_0...doc/matrix.htm ) и нема да те боли глава.

3) Веруј ми да не желиш да се бакћеш са проверама величине стека. Ако имаш иоле велику структуру података, мораћеш да је креираш на хипу. Лепота код С++а је што постоје класе (као нпр матрица коју сам ти препоручио) које ти омогуће да креираш објекат на стеку а он интерно алоцира и деалоцира меморију са хипа колико му треба.

Dragi Tata 20. 12. 2010. 16:20

Citat:

Originalno napisao jablan (Napišite 93191)
pošto malloc vraća NULL ako ne uspe da alocira zadatu veličinu.

Чисто информације ради: на Линуксу то најчешће није случај. Тамо malloc увек врати поинтер који није нула и онда тек кад га дереференцираш он прсне. Више о томе: http://linux.die.net/man/3/malloc

jablan 20. 12. 2010. 16:25

^ 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... :)

Dragi Tata 20. 12. 2010. 16:31

Citat:

Originalno napisao jablan (Napišite 93212)
^ Koliko kapiram, nije da nikad ne vraća NULL, već ponekad ne vrati NULL iako nema garancije da je to i alocirao?

Јесте, лоше сам се "одразио" :)

Поента је да не можеш да рачунаш на то да ће malloc да му врати NULL.

Off Topic: BTW, čovek Splićanin, a ti razvezao ćirilicom... :)


Упс. Ево лека: Microsoft Transliteration Utility

Мада, ако је већ кренуо да учи С++, ћирилица му је најмањи проблем :D

jablan 20. 12. 2010. 16:43

Citat:

Originalno napisao Dragi Tata (Napišite 93213)

Evo još jednog:

http://www.benya.com/cyrillic/tocyrillic/#bookmarklets

nn.nn 20. 12. 2010. 18:33

^ A evo još jednog: http://translate.google.com/ :)


Vreme je GMT +2. Trenutno vreme je 21:42.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.