
[C]Detekce konstanty Vyřešeno
Re: [C]Detekce konstanty
Ten realloc() přece 

"Král Lávra má dlouhé oslí uši, král je ušatec!
(pravil K. H. Borovský o cenzuře internetu)
(pravil K. H. Borovský o cenzuře internetu)
- CZechBoY
- Master Level 9.5
- Příspěvky: 8813
- Registrován: srpen 08
- Bydliště: Brno
- Pohlaví:
- Stav:
Offline
- Kontakt:
Re: [C]Detekce konstanty
Jo ale když mám právě char pevna[1024] = {0}; tak jak to předělám aby se mi tam toho vešlo víc?
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW
Re: [C]Detekce konstanty
Refaktorizace -> rekompilace
Tak tohle za běhu nepředěláš, protože to je na zásobníku, a tam máš velikost pevnou. Ale šlo by jednotlivé bloky po 1024B dynamicky nabírat rekurzí, a všechna data nakonec zkopírovat do nějakého alokovaného pole z posledního vnoření. Během návratu z rekurze by se ti zase automaticky zrušil ten vícenásobný buffer, a zůstal by ti jen ukazatel na nově vytvořené pole.
Ale musíš počítat s režií a také zásobník není nekonečný, já na Linuxu mám 8MiB, a mám pocit že kdysi ve Widlích to byly jen 4MiB!
Edit: Oprava - z posledního vnoření pouze alokovat a zkopírovat svojí část, předchozí bloky by se musely zpětně kopírovat během vynořování.

Tak tohle za běhu nepředěláš, protože to je na zásobníku, a tam máš velikost pevnou. Ale šlo by jednotlivé bloky po 1024B dynamicky nabírat rekurzí, a všechna data nakonec zkopírovat do nějakého alokovaného pole z posledního vnoření. Během návratu z rekurze by se ti zase automaticky zrušil ten vícenásobný buffer, a zůstal by ti jen ukazatel na nově vytvořené pole.
Ale musíš počítat s režií a také zásobník není nekonečný, já na Linuxu mám 8MiB, a mám pocit že kdysi ve Widlích to byly jen 4MiB!
Edit: Oprava - z posledního vnoření pouze alokovat a zkopírovat svojí část, předchozí bloky by se musely zpětně kopírovat během vynořování.
Naposledy upravil(a) faraon dne 27 bře 2014 20:43, celkem upraveno 1 x.
"Král Lávra má dlouhé oslí uši, král je ušatec!
(pravil K. H. Borovský o cenzuře internetu)
(pravil K. H. Borovský o cenzuře internetu)
- CZechBoY
- Master Level 9.5
- Příspěvky: 8813
- Registrován: srpen 08
- Bydliště: Brno
- Pohlaví:
- Stav:
Offline
- Kontakt:
Re: [C]Detekce konstanty
Takže jsme došli k čemu? Že prostě je lepší alokovaná paměť.
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW
Re: [C]Detekce konstanty
Ale v devětadevadesáti procentech případů ti dostatečně dimenzovaný statický buffer stačí, stačí si jen ohlídat možnou chybu.
Pokud počítáš s tím že načítaná data budou velmi velká, postavíš celý program úplně jinak, a smíříš se s tím že ti to malloc() bude brzdit.
Pokud počítáš s tím že načítaná data budou velmi velká, postavíš celý program úplně jinak, a smíříš se s tím že ti to malloc() bude brzdit.
"Král Lávra má dlouhé oslí uši, král je ušatec!
(pravil K. H. Borovský o cenzuře internetu)
(pravil K. H. Borovský o cenzuře internetu)
- CZechBoY
- Master Level 9.5
- Příspěvky: 8813
- Registrován: srpen 08
- Bydliště: Brno
- Pohlaví:
- Stav:
Offline
- Kontakt:
Re: [C]Detekce konstanty
Malloc brzdí? Jsem spíš myslel, že ti pak program bude zabírat míň místa v paměti. Je to sice na heapu, ale i tak.
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW
Re: [C]Detekce konstanty
Sice budeš mít jen tolik místa kolik opravdu potřebuješ, ale to vyhledání volného místa odpovídajícího požadavku také chvíli trvá. Zvlášť když knihovna programu nemá zrovna dostatečnou rezervu a musí žádat operační systém o nový blok...
"Král Lávra má dlouhé oslí uši, král je ušatec!
(pravil K. H. Borovský o cenzuře internetu)
(pravil K. H. Borovský o cenzuře internetu)
- CZechBoY
- Master Level 9.5
- Příspěvky: 8813
- Registrován: srpen 08
- Bydliště: Brno
- Pohlaví:
- Stav:
Offline
- Kontakt:
Re: [C]Detekce konstanty
Takže říkáš, že dostatečně velká proměnná je výhodnější jo?
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW
Re: [C]Detekce konstanty Vyřešeno
Prakticky by to mělo vyjít nastejno, jen s menší režií, protože na zásobníku je to jednodušší. Akorát že ten buffer existuje pouze po dobu práce funkce (nebo musí být static), zatímco alokovanou paměť můžeš používat i mimo funkci. Prostě použiješ to co se ti zrovna víc hodí.
"Král Lávra má dlouhé oslí uši, král je ušatec!
(pravil K. H. Borovský o cenzuře internetu)
(pravil K. H. Borovský o cenzuře internetu)
Zpět na “Programování a tvorba webu”
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 3 hosti