Anonymní profil Štěpán – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Štěpán – Programujte.comAnonymní profil Štěpán – Programujte.com

 

Příspěvky odeslané z IP adresy 88.100.48.–

C / C++ › NVIDIA CUDA Toolkit 5.5 - Ch…
13. 12. 2013   #185206

Ahoj, nemám s tímto produktem žádnou zkušenost a teprve se to musím naučit používat, při instalaci na mě vyskočily tyto dvě upozornění (viz obrázky), jen bych se chtěl zeptat, jestli někdo, kdo to používáte, víte, o co jde, a jestli to nějak může ovlivnit funkčnost. Až budu v budoucnu hledat chybu, rád bych věděl, že není v instalaci, ale ve zdrojovém kódu / v nastavení projektu. Používám VS2010 express. Díky.

Připojen obrázek.

Připojen obrázek.

C / C++ › Zpracovávání zpráv windows b…
10. 10. 2013   #182184

#3 hoacin
Už jsem to vyřešil, to co jsem potřeboval řeší funkce PeekMessage, měl jsem se nejdřív pořádně podívat do MSDN.

C / C++ › Zpracovávání zpráv windows b…
10. 10. 2013   #182182

#2 KIIV
Přerušitelný je na konci každého toho cyklu, zajímá mě právě, jak zkontrolovat ty zprávy. Když tam napíšu while(GetMessage(...)), tak už mě to nikdy nevrátí zpět do toho cyklu, ne? Jak se k těm zprávám dostanu? Předpokládám, že vyřízení provádí to TranslateMessage a DispatchMessage, ale nevím, kde ty zprávy vzít.

C / C++ › Zpracovávání zpráv windows b…
10. 10. 2013   #182180

Ahoj,

na konci WinMain mám snad typickou smyčku

while (GetMessage(&msg, NULL, 0, 0))
    {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
    }

Teď mám ale výpočet a chtěl bych na konci každého cyklu for vyřídit zprávy systému, aby okno nebylo zamrzlé po dobu několika hodin + poskytnout uživateli info / možnost zastavení algoritmu. Co mám napsat na konec cyklu? GetMessage mi tam moc nedává smysl   

for (... i )

{

  výpočet(i)

  ???

}

C / C++ › Správce úloh - využití paměti
9. 10. 2013   #182153

#2 KIIV
Vyřešeno   Vynuloval jsem to hned po alokování a už to ukazuje normálně. A ještě dík za radu k vypnutí virtuální paměti, já jak programuju tyhle věci, tak se vždycky úplně děsím, že kdybych se někde začal vrtat v cyklu do disku, že je konec... Hned se budu cítit trochu líp ohledně mýho SSD.

C / C++ › Správce úloh - využití paměti
9. 10. 2013   #182149

#2 KIIV
Přesnou analýzu využití těch dat nemám, ale očekávám, že ten 1GB, co to ukazuje, je ta paměť, která se tam už nějak mele (vždycky jsem měl pocit, že to používá cca 2x víc, ale ničím nějak extra podložený) a zbylých 17GB je nová funkce, kde jsem to zatím jen alokoval. Zkusím to smáznout na nuly a uvidím, v každým případě malloc je správná funkce, ne? A o to, že by se to cpalo na disk, se bojím asi zbytečně, že? Protože to jsou data na kterých pojedou mezivýpočty a při životnosti buňky SSD by to ten disk mohlo odpálit za půl hodiny...   Vůbec jsem nevěděl, že to systém nemusí alokovat v momentě vytváření toho bloku, to mi dost uniká, jak to může fungovat, stejně tam nic nesmí napsat  To si zjišťuje, který ukazatel těm datům náleží, a až při při prvním zápisu do toho intervalu to alokuje?

C / C++ › Správce úloh - využití paměti
9. 10. 2013   #182144

Ahoj,

pomocí funkce malloc jsem alokoval po malých blocích 18GB, aniž by cokoliv z toho vrátilo NULL a správce úloh windows říká, že můj program používá 950MB paměti (jedu na x64 s 32GB RAM). Jak je to možné, musím před zájmem o alokování takového místa volat ještě jiné funkce kvůli oprávněním, nebo to alokovat s pomocí HeapAlloc nebo VirtualAlloc? Ptám se i proto, že mám systémové SSD a že ten poslední a dosti drahý vydržel půl roku. Kdyby mi systém používal pro tahle data SSD jako operační paměť, tak si můžu za měsíc koupit novej disk   Můžete mi prosím napsat, jak to všechno funguje a případně co dělám špatně?

Díky

C / C++ › Kde najít knihovny, které ne…
1. 10. 2013   #181878

Ahoj, jaký se používá trik, když člověk shání knihovny do VS Express, která je až v placených edicích studia? Nemůžu najít 64 bitové knihovny vcomp.lib a vcompd.lib a header omp.h pro VS 2010 nikde na netu a vzhledem k tomu, že nejsem profi vývojař a mám to pro vlastní výzkum, tak mě placené VS kvůli jedné funkci moc nelákají   Když jsem instaloval minule, tak jsem je někde našel, musel jsem ale přeinstalovat a teď jako by se po nich zem slehla...

C / C++ › Statické proměnné v paraleln…
4. 7. 2013   #178769

Ahoj, je možné, aby měla rekurzivní funkce statickou proměnnou jen pro vlastní hloubkovou rekurzi, ale při paralelním běhu aby každý jádro mělo svou vlastní statickou proměnnou? Jistě to jde obejít polem že si tam definuju statický pole pro počet procesorů, spíš mě zajímalo, jestli se to dá řešit líp  Nevím, jestli je jasný, co chci, já prostě nějaký data zpracovávám rekurzivním voláním funkce a bez ohledu na úrovni, kde jsem, nějaký informace ukládám do statických proměnných společných pro všechny úrovně rekurze. A těch dat na zpracování je hodně a proto to musí běžet paralelně. A tady už by byl problém, že každej procesor by počítal úplně s jinými vstupními daty a házel by mezivýsledky do stejné statické proměnné...

C / C++ › Paralelní Sort
18. 4. 2013   #175187

#10 vitamin
Díky.

OpenMP - samozřejmě to nebylo tak žhavý, jak jsem v OpenMP novej, tak jsem myslel, že počet dostupných vláken se volá funkcí omp_get_num_threads a ono se mělo použít omp_get_num_procs, já tu funkci už používal, jenže tam kde jsem ji volal zrovna vracela to co jsem čekal a tady vracela jedničku, na čemž to padalo  

std::sort - neznám, kouknu na to   Používám microsoft visual studio 2010, takže nějakej microsofťáckej kompilátor.

C / C++ › Paralelní Sort
18. 4. 2013   #175151

   

Ahoj, nechtěl jsem kvůli tomu zakládat nový vlákno. Je nějaký důvod, aby funkce qsort a memcpy nemohly běžet paralelně?    Když si do toho té pragmy dám message box s číslem threadu tak normálně vyskočí 12 message boxů s čísly 0...11 přesně jak bych očekával. Když tam ale použiju memcpy nebo qsort, padá to. Bohužel OpenMP nemůžu otestovat v debug verzi ale jen v release, tak se to blbě hledá. Je nějaký důvod, aby tyto funkce nemohly běhat paralelně?  

Díky

C / C++ › Paralelní Sort
18. 4. 2013   #175146

Jen ze zvědavosti, neexistuje nějakej rychlejší "sort" na to, když potřebuju jen dostat stejné hodnoty k sobě? Mně je v tom výpočtu jedno jestli mi to seřadí jako 1 4 4 4 5 7 7 9 nebo 7 7 1 9 4 4 4 5  

C / C++ › Paralelní Sort
17. 4. 2013   #175117

#6 KIIV

Ty prvočíselný součiny jsou rozsahem kolem 34 bitů, právě se to těsně nevlezlo na uint. Teď mě ale napadá, že podle toho třetího identifikátoru to půjde seřadit asi celkem dobře, tam ta čísla půjdou nějak předvídat, co je zhruba střední hodnota. Možná bych si nějakou střední hodnotu mohl vypočítat i při tom generování.

C / C++ › Paralelní Sort
17. 4. 2013   #175112

S tou střední hodnotou to bude oříšek, není to číslo ale 160 bitová struktura která obsahuje tři proměnné s prvočíselnými součiny (každé prvočíslo je nějaká vlastnost a jejich součin je pak unikátní ID kombinace těch vlastností). Takže co za data a jak moc setříděná ve smyslu když bych udělal třeba statistiku z tisícovky příkladů té první proměnné třeba, si netroufám odhadovat. No popřemýšlím o tom, nějak to půjde  

C / C++ › Paralelní Sort
17. 4. 2013   #175109

#2 vitamin

Používám c++ a pro paralelizaci OpenMP. Mě napadlo že to rozdělím v OpenMP, jen mi nebylo jasný, co udělám s těma seřazenýma blokama na konci, budu mít 12 polí (počet vláken) a každý bude mít 20 000 000 / 12 seřazených prvků a teď co s tím?  Kouknu na obrázky a třeba mi to dojde...

C / C++ › Paralelní Sort
17. 4. 2013   #175106

Ahoj, znáte nějakou knihovnu, funkci, která podporuje paralelní sort? Třídím 20 milionové pole a klasickej qsort trvá asi 4 vteřiny a je to trochu na obtíž na to pořád dokola čekat...

Na netu jsem našel a stáhnul nějaký soubory .h a .inl z knihovny Thrust, ale moc chytrej z toho nejsem...  

Díky

C / C++ › Přechod z 32bit na 64bit
9. 4. 2013   #174699

   

Tak už to mám, dokonce se to tváří, že to funguje. Překvapilo mě, že sizeof (int) je pořád 4, je mi to teda jedno, ale myslel jsem, že bude 8  Jinak sizeof(void*) je 8, podle toho jsem usoudil, že to je v pořádku  

Štěpán
C / C++ › Přechod z 32bit na 64bit
9. 4. 2013   #174692

Ahoj,

tak už mi malloc vrací nuly, nemám 32GB RAMek, abych nemohl alokovat půl gigovou proměnnou  Kdybych byl minimalista, tak bych to asi ještě nějak šetrně poskládal, ale příjde mi to už zbytečný, víc zdrojů, víc možností i do budoucna, pořád počítat jestli si můžu alokovat 300MB pole pro odhazování nějakejch výsledků nebo ne mě nebaví.

Co všechno se v programu musí změnit, aby se ten kód rozjel? Funguje Win32 api, GDI a takový ty základní funkce jako WriteFile, LineTo, PlaySound, malloc, smyčka zpráv a tak, nebo se to musí psát už v něčem jiném? Změnu velikosti proměnných pro ukládání pod kontrolou (snad) mám, používám tam int32_t a podobné typy. Můžete jen ve stručnosti naznačit, v čem může vzniknout problém při přechodu na 64 bit a v čem spíš ne?  Zatím si instaluju SDK do VC++ 2010, nemá tam 64bit kompilátor ale co jsem četl, tak se to dá postahovat.

Díky

Štěpán
C / C++ › Vývojová prostředí c++ - jak…
8. 4. 2013   #174642

   

Já mám Microsoft Visual Studio Express 2010 a vypadá, že spolknul i ty registrační údaje  Dokonce mi na tom běhá i Open MP, která je součástí pouze placených licencí  

Štěpán
C / C++ › Win32, malloc 10GB v 64bitov…
8. 4. 2013   #174639

#4 Grungy
Nepotřebuju to nijak nutně ani urgentně, ale zrychlilo by mi to složitej výpočet a každé zrychlení dlouhých výpočtů se počítá  

Tady jsem konkrétně řešil jestli si můžu nějak pomoct při zrychlení paralelizace na 12 logických jádrech (6+6 hyperthreading). Výstupní tabulka výpočtu má 0.5GB a do té se zapisuje výstup z výpočtu na nezávislých prvcích obrovského pole, které paralelně projíždím. Problém je že podle Amdahlova zákona ztratím mnoho času zápisem do tohoto pole, kdy musím pro zápis pozastavit ostatní vlákna (nesmí zapisovat naráz). Zapisovat paralelně a doufat, že se nepotkají, je sice taky možnost, ale nic moc, dřív nebo pozděj by to prasklo  Takže by bylo fajn alokovat si 12 těchto tabulek, pak by paralelizace měla nulové ztráty a pak bych jen paralelně tyto tabulky posčítal do jedné výsledné, což by mělo také nulové ztráty. Můj dojem je, že by to byla rychlejší metoda, ale ještě nemám spočítané ani pořádně odhadnuté, jaké procento časové složitosti bude mít kritický neparalelizovatelný zápis, ale odhad je, že dosti vysoký, kdyby jen 10%, tak už bude výkonnostní nárust zajímavý a kdyby 25%-50%, tak je to hrůza, to těch 12 jader bude permanentně chrápat  

Štěpán
C / C++ › Win32, malloc 10GB v 64bitov…
5. 4. 2013   #174495

Ahoj,

je možné, aby 32bitová aplikace alokovala třeba 10GB v 64bit OS s kvantem RAMek, nebo mě ten malloc prostě nepustí? Díky

Štěpán
C / C++ › Open MP - paralelizace cyklu…
4. 4. 2013   #174425

Ahoj,

používáte někdo tento nástroj? Mohli byste mě nasměrovat, na co se kouknout, nějakou jednoduchou dobrou dokumentaci, příklady? Poradit, co nastavit v nastavení projektu a tak? Používám Visual C++ 2010 teprve 1 den, Open MP jsem nikdy dřív nepoužil, tak moc nevím. Zatím jsem se koukal jen na wikipedii, co tam o open mp je, nějaké základy tam jsou, ale nikdy jsem pro víc jader neprogramoval, tak všemu úplně nerozumím.

Úkol je cyklus for rozházet mezi maximální počet jader CPU, prvky cyklu jsou na sobě nezávislé, je jich několik milionů a jejich průchod je vždy dosti podobný. Jedno jádro řeší cca 25 000 cyklů za sekundu, výpočet uvnitř je tedy dostatečně složitý. Pro výpočet se používají (na čtení, nikoliv na zápis) pole, která budou pro jádra společná.

1. Jestli jsem to dobře pochopil, klidně i všechna jádra mohou ve stejnou dobu číst na stejném místě v paměti, je to pravda?

2. Vytvoří si při použití #pragma omp parallel for každé vlákno své proměnné (definované uvnitř cyklu)?

3. Zápis výsledku bude velmi rychlý, bude se jednat o méně než 1% celkové časové složitosti cyklu. Ukládám do velkého pole společného pro všechna vlákna a existuje šance, že by se zde vlákna mohla při zápisu setkat. Jak zařídit, aby se toto nemohlo stát?

4. Rád bych umožnil uživateli výpočet zrušit za běhu a chci jej informovat o průběhu, můžete jen naznačit logiku, jak se toto řeší?

Díky a sorry za wall of text  

Štěpán
C / C++ › Vývojová prostředí c++ - jak…
29. 3. 2013   #174086

   

Díky za názory, já právě ten expres původně chtěl, ale je tam 30 denní trial a pak je nutná registrace. Tak jsem si pustil tu registraci a tam to po mně chtělo údaje, který prostě byly nevyplnitelný, pořád se tam vyptávali jako bych byl zaměstnanec / šéf nějaké firmy. Já to mám jen tak a na ty jejich otázky bych si musel polovinu odpovědí vymyslet Takže to je v pohodě napsat, že jméno mé firmy neexistuje, že má 0 zaměstnanců a že vydělává méně než dvacet korun měsíčně?

Štěpán
C / C++ › Vývojová prostředí c++ - jak…
28. 3. 2013   #174046

Ahoj,

můžete mi poradit nějaké dobré vývojové prostředí pro psaní v c++?   Pořídil jsem si nový PC s Win8, jsem rekreační programátor, programování jsem se věnoval víc před pár lety, dnes mám práci jinou a jen ve svém volném čase programuji jednu výpočetní aplikaci z oboru, kterému se věnuji, nic víc. Visual Studio za 15k tedy jaksi není pro mě to pravé, využiju z toho sotva 1% toho, co to umí. Používám jen Win32 Api, dál bych rád zprovoznil OpenMP (nebo něco podobného) a mělo by to být pro 64bit i 32bit windowsy. To je vše, co potřebuji. Samozřejmě že kdyby to mělo dobrej debuger, tak bych se nezlobil. Nebo jestli jde koupit za nějakou normální cenu (do 5k) třeba starší visual c++, w/e, ale 15k nedám 

Díky za názory, 

Štěpán
C / C++ › Nový řádek ve wchar_t
19. 3. 2013   #173020

Ok, mrknu na google, já jen že s řetězcema normálně nedělám a vím, že nový řádek mě už několikrát zaskočil

Štěpán
C / C++ › Nový řádek ve wchar_t
19. 3. 2013   #173016

Ahoj,

mám velmi jednoduché zadání, potřebuji z unicode řetězce načteného z multiline edit boxu (wchar_t pole) vymazat mezery a nové řádky a text "srazit" k sobě. Pod jakým číslem najdu nový řádek? Nebo jsou to dva znaky za sebou? Případně i tu mezeru kdybyste mi poradili, bylo by to fajn, ale tu už bych si zvládl najít. Díky

Štěpán
C / C++ › Víceřádkový edit bez vertica…
8. 3. 2013   #172464

Ahoj, je možné textovému políčku (třídě "EDIT") přiřadit vlastnost, aby byl multiline a aby mohl být text i na více řádcích, než jsou vidět na ploše okna, ale aby se v prvku pohybovalo pouze kurzorem a šipkami, tedy aby nebyl vidět rušivý vertical scrollbar? Do designu by nezapadl.

Díky za radu

Štěpán
C / C++ › Zjištění textu ve clipboardu
22. 2. 2013   #171806

Ahoj, jak zjistit unicode text, který je ve clipboardu? Není to má lennost, ale fakt to nedokážu najít

HANDLE hClipboard=GetClipboardData(CF_UNICODETEXT);

jsem si najít uměl. Že je handle NULL, pokud tam text není, taky, ale pokud je, tak mě nikde na první ani na druhý pohled nepřišla pod oko informace, jak s tím objektem hClipboard dále naložit

Děkuju.

Štěpán
C / C++ › Dostanu od Win8 45GB RAM pro…
20. 2. 2013   #171752

Ahoj,

pracuji na časově i paměťově velmi složitém výpočtu, který pro svůj chod potřebuje alokovat kolem 45 GB RAM, do které bude výpočet skákat prakticky náhodně, takže není možné část načíst a pak načíst druhou část. Stačí si koupit komp s Win8, 64GB RAM a napsat malloc(45000000000) a hotovo, nebo si musím dát ještě na něco pozor? Nikdy jsem tak obrovské pole nealokoval a jedu ještě na 32 bitových Winech a to číslo se mi nevleze ani do intu, tak jsem z toho takovej zmatenej Teda těch malloců bych dal určitě víc po menších kusech, asi něco přes 1000 po cca 400MB, ale jde mi o to, jestli tak celkově od oken dostanu tolik paměti a jestli to bude skutečně celý v RAM a ne někde na disku ve virtuální paměti nebo jak se tomu říká? Kupovat si kvůli tomu komp se 128GB RAM se mi zrovna nechce, tam je obrovskej cenovej rozdíl

Díky.

Štěpán
C / C++ › Zvuk - funkce pro přehrání m…
7. 8. 2012   #161163

Ahoj,

potřeboval bych poradit, jak co nejjednodušeji přehrát soubor s příponou mp3. Programuji pro Windows i pro Windows Mobile 6 v klasické WinAPI, na druhý jmenovaný jsem našel že by snad mohla fungovat funkce sndPlayAsync, ale nevím. Všechno bere waw soubory, ale ty jsou moc velké. Použít DirectX nebo MCI se mi zdá moc složité, v té jejich API se neorientuju. Taky bych rád, aby to bylo použitelné pro obě platformy, i když podmíňený překlad to když tak vyřeší. Případně dá se nějak zmenšit waw, aby nebyl tak šíleně velkej?

Štěpán
C / C++ › Pelles C / Pocket PC / proje…
13. 2. 2012   #153509

#1 Štěpán
Vyřešeno. Pomohla reinstalace Pelles C na nejnovější beta verzi 6.5, tam šlo staré ppj soubory načíst a už nebyl problém.

Štěpán
C / C++ › Pelles C / Pocket PC / proje…
10. 2. 2012   #153393

Ahoj,

Už dost dlouho vyvíjím aplikaci pro Windows Mobile zařízení (s podmíněným překladem, funguje i pro PC). Vyvíjím v Pelles C. Nedávno jsem přeinstaloval Windows Vista za Windows 7, stáhl jsem si tedy znovu Pelles C. Nejde mi v něm načíst starý ppj soubor. O to by nešlo, ale když vytvořím nový a aplikaci postavím, na mobilu nefunguje. Občas dělá to co má, ale většina složitějších funkcí vůbec nereaguje na moje podněty. Takovou chybu mi to házelo naposledy, když přetékala paměť, ale tady by nic takového nemělo být, ten zdroják je totožný s tím, ze kterého byla dříve postavena 100% funkční aplikace. PC verze jde sestavit a funguje dobře.

Máte nápady, na co jsem mohl zapomenout? Nějaký SDK, project settings, cokoliv? Ten zdrojový kód na 100% fungoval. Jen jsem teď přeinstaloval OS a Pelles C a najednou nejde načíst starý ppj a sestavená aplikace pro PPC blbne, což je samozřejmě horší...

Štěpán
C / C++ › Dá se zamaskovat název progr…
7. 2. 2012   #153263

#2 m->29
Díky, už jsem se s tou Win API pro internetové funkce jakž takž seznámil a user agent se tam mělo zadat hned do inicializace spojení, tak tam dám doporučenou operu...

Štěpán
C / C++ › Dá se zamaskovat název progr…
6. 2. 2012   #153261

Ahoj,

programátorské povinnosti mě poprvé přivedly na pole internetu, nemám s tím vůbec žádnou zkušenost. Chci použít funkce klasické Win32 API, aby byl program snadno přenositelný i na Windows Mobile telefon.

Mám vlastní webové stránky a ve statistikách mám zobrazené i to, který web browser stránku stahoval. Rád bych, aby se jméno mého programu do takových statistik nikdy nedostalo. Jak programátorsky ošetřit, abych to stahoval anonymně případně pod vymyšleným jménem?

Štěpán
C / C++ › Špatný kurzor - hodiny místo…
3. 1. 2012   #151942

#2 Marek
Tak na toto jsem pul roku nemohl prijit, jsem vzdy z okna vyjel mysi a vratil jsem se do nej. Ja ten kurzor uz mockrat nejak nacital, ale nikdy me nenapadlo ho priradit do WNDCLASSEX... VYRESENO

Štěpán
C / C++ › Špatný kurzor - hodiny místo…
3. 1. 2012   #151911

Ahoj, je to blbost, ale nemůžu si s tím poradit. Aplikace v okně ve WinAPI se mi spouští s hodinami (inicializace je dlouhá) místo s klasickým kurzorem myši, co s tím? Já zkoušel nějaký LoadCursou, ale nevěděl jsem, co dál, a po půl roce testování aplikace mě už nebaví vždycky vyjet mimo okno, chvilku tam počkat a pak se teprve vrátit s normální šipkou...

Štěpán
C / C++ › Bláznivé chování statické pr…
13. 9. 2011   #147459

Tak ty největší monstra jsem přestěhoval do mallocu, bylo toho skoro 1MB. statiky jsem všude smazal a běží to. Teď je jen otázka, jak říká voty, jestli to problém vyřešilo, nebo jen skrylo. Ale vzhledem ke struktuře programu těžko věřím, že bych ji mohl mazat přímo od sebe, půl roku to fungovalo dobře a ty poslední řádky kódu, které jsem přidával včera a předevčírem, se zkrátka spouští až někde hluboko v programu, nikoli hned při spuštění. Ale každý chybujeme, nemožné to není. V každém případě teď program běží zdá se na 100%.

Díky za pomoc.

Štěpán
C / C++ › Bláznivé chování statické pr…
12. 9. 2011   #147446

#4 KIIV
No já to tedy předělám na malloc, přišlo mi to takové komfortní psát přímo 4 indexy do závorek, ale ta cena za to je příliš vysoká, když kvůli tomu padá aplikace... Tak já vezmu papír, tužku, vypočítám správný offset v jednorozměrném poli, vytvořím ho mallocem / HeapAllocem, přepíšu to a pak dám vědět jestli to pomohlo...

Štěpán
C / C++ › Problém DX a Cpp
12. 9. 2011   #147444

A možná se taky jen pletu, že to bylo #include <d3dx9.h>...   fakt teď nevím, jestli to máš podle nějakého návodu, tak to budeš muset počkat na radu někoho kvalifikovaněšího.

Štěpán
C / C++ › Problém DX a Cpp
12. 9. 2011   #147442

Je to už přes 5 let, co jsem naposledy držel v ruce Direct 3D, ale mám pocit, že těch lib knihoven tam bylo víc než jen d3d9.lib. Něco s xkem, d3dx9.lib nebo něco takového...

Štěpán
C / C++ › Bláznivé chování statické pr…
12. 9. 2011   #147441

#2 KIIV
Ano, vstupní data jsou totožná. Program nefunguje, smažu slovo static a program funguje... Nechápu to.

Ale k tomu, co píšeš...

Slovo static mám u všech g_ proměnných, tedy u těch pro celý soubor main.c.

Nevím ani proč, mám to smazat?  

Jinak tyto proměnné mohou zabírat docela dost místa,

mám tu i takové jako double[13][13][13][13], long[13][13][13][13], 12ti bajtová struktura[13][13][101]...

Je to lepší alokovat pomocí HeapAlloc nebo malloc? Také mám funkce o 2000 řádcích, nevadí to? Díky za radu!

PS: Ta rekurze pro mě tedy momentálně není na pořadu dne, spíše jsem ji uvedl, že mě to C někdy pěkně vykolejí... Také jsem v některých případech neuspěl s vytvořením funkce se 4 parametry... Dokud to šlo, tak jsem se takovým problémům vyhýbal, ale teď už to zašlo daleko...

Štěpán
C / C++ › Bláznivé chování statické pr…
12. 9. 2011   #147433

Ahoj, myslel jsem, že v C(++) už mě nic nepřekvapí, prošel jsem vším od složitých výpočetních algoritmů až po DirectD3.

Už přes půl roku programuji ve vývojovém prostředí Pelles C aplikaci pro Windows Mobile.

Programuji v ryzím C, nikoli v C++.

Má asi 10 000 řádků. Vše mám jednom souboru main.c

A teď to příjde:

1. problém nastal už dávno při volání rekurzivní funkce. Faktoriál rekurzí mi šel, jiný výpočet rekurzí ale z mně neznámého důvodu padal. Tehdy jsem to neřešil a napsal jsem to iterací...

2. Včera mi ale program totálně zešílel. Půl roku plně funkční aplikace přestala od základu fungovat. Dlouho jsem to ladil (bez debugeru), výsledek mě šokoval o to víc. Když jsem definoval (úplně zbytečnou, nepoužívanou) proměnnou

uvnitř jedné z funkcí double dbl[10]; bylo vše v pořádku.

když jsem definoval

double dbl[100];

program se najednou sesypal.

3. Toto jsem "vyřešil" tak, že jsem obrovské bloky zdrojáku dal z jedné velké do více menších funkcí a zas to fungovalo...

4. Dnes ale nastal error ještě větší, když mi neznámo kde program začal mazat obsah jedné proměnné (definované pro celý soubor main.c "static int g_iTestLevel;".

Po pěti hodinách jsem přišel na to, že když ji definuji jako static (takto mám všechny proměnné) program mi ji někde vynuluje. Když klíčové slovo static vynechám, program funguje jako švýcarské hodinky.

Co se to s tou aplikací proboha děje? Mám mobil s cca 256 MB RAM, ta aplikace žere maximálně 5MB (spíše 2MB), systém má volných cca 150MB. Tak s pamětí v mobilu by problém být neměl.

Máte někdo zkušenosti s podobným nesmyslným chováním aplikace na Windows Mobile?

-//- s podobnými nesmysly ve vývojovým prostředím Pelles C? Ono někdy se chová fakt zvláštně...

Je problém, že mám vše v jednom (a pěkně nepřehledném:D) souboru main.c?

Je nějaký důvod (z pohledu funkčnosti, ne přehlednosti) psát více krátkých funkcí, mít více malých xxx.c souborů než jeden velký main.c? Já už opravdu nevím, obávám se, že jednou tu aplikaci už přestanu zvládat.

Děkuji za nápady.

 

 

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