Moc velké pole – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Moc velké pole – C / C++ – Fórum – Programujte.comMoc velké pole – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
Hlavinka0
Návštěvník
24. 12. 2012   #1
-
0
-

Dobrý den,

chtěl bych se zeptat jak vytvořit pole, které je extra velké př.

	long long pole[500000];

program se mi s tímto polem přeloží, ale program stejně nefunguje, nedokáže s tím polem pracovat.

Děkuji za odpověď :-)

Nahlásit jako SPAM
IP: 188.175.185.–
crazy
~ Moderátor
+10
Grafoman
24. 12. 2012   #2
-
0
-

#1 Hlavinka
staticky vytvářené proměnné se vytvářejí na stacku a ten má omezenou velikost, danou OS. Pokud to alokuješ dynamicky (na heapu), tak by to mělo fungovat.

Ikdyž nechápu na co potřebuješ tak obrovské pole.)

long long *pole = (long long*) malloc( 500000 * sizeof( long long ) );
Nahlásit jako SPAM
IP: 89.190.90.–
All you need is vision and time.
Hlavinka0
Návštěvník
24. 12. 2012   #3
-
0
-

potřebuju to pro výpočty s velkými čísly, kterých je fakt hodně :-) a problém je, že jsem to chtěl staticky kvůli přístupové rychlosti 

Nahlásit jako SPAM
IP: 188.175.185.–
crazy
~ Moderátor
+10
Grafoman
24. 12. 2012   #4
-
0
-

#3 Hlavinka
záleží na OS, ale defaultní velikost stacku je zhruba 1MB, kdežto velikost jednoho typu long long (také záleží na implementaci) je 8B. 500000 * 8B jsou 4 MB, čili překračuješ velikost stacku...

Nahlásit jako SPAM
IP: 89.190.90.–
All you need is vision and time.
Hlavinka0
Návštěvník
24. 12. 2012   #5
-
0
-

:DD hej je blbé přijít na to jak to ošidit :-) napadlo mě to pole rozebrat na více rozměrů, takže ošidím tu velikost stacku, což zřejmě funguje když mi to jede :-) (a navic ta velikost pole je určena vynásobenými velkými prvočísly :-) 510510 = 2*3*5*7*11*13*17)

Nahlásit jako SPAM
IP: 188.175.185.–
zlz
~ Anonymní uživatel
634 příspěvků
24. 12. 2012   #6
-
+1
-
Zajímavé

Neošidíš nic. Buď to na zásobníku nemáš, nebo máš a pak ho zase vyčerpáš.

Řešení je zvětšení zásobníku, nebo umístění mimo zásobník - statickou alokací(rezervací) použitím globálního pole nebo statického lokálního pole, nebo dynamickou alokací na haldě.

A pro zajištění teoretického rychlejšího přístupu v podmínkách, které stejně nenastanou, bys musel udělat víc, než jen vrazit 4MB na zásobník.

Nahlásit jako SPAM
IP: 80.188.216.–
Hlavinka0
Návštěvník
24. 12. 2012   #7
-
0
-

to mi doslo pozdeji az jsem to napsal a uzavrel :-) ale diky uz se s tim nejak poperu 

Nahlásit jako SPAM
IP: 188.175.185.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 46 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý