[C]Detekce konstanty

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7415
Registrován: 23 pro 2010 09:23

Re: [C]Detekce konstanty

Příspěvek od faraon »

Ten realloc() přece :-D
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)
Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: 20 srp 2008 14:02
Bydliště: Brno
Kontaktovat uživatele:

Re: [C]Detekce konstanty

Příspěvek od CZechBoY »

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
Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7415
Registrován: 23 pro 2010 09:23

Re: [C]Detekce konstanty

Příspěvek od faraon »

Refaktorizace -> rekompilace :lol:

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)
Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: 20 srp 2008 14:02
Bydliště: Brno
Kontaktovat uživatele:

Re: [C]Detekce konstanty

Příspěvek od CZechBoY »

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
Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7415
Registrován: 23 pro 2010 09:23

Re: [C]Detekce konstanty

Příspěvek od faraon »

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.
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)
Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: 20 srp 2008 14:02
Bydliště: Brno
Kontaktovat uživatele:

Re: [C]Detekce konstanty

Příspěvek od CZechBoY »

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
Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7415
Registrován: 23 pro 2010 09:23

Re: [C]Detekce konstanty

Příspěvek od faraon »

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)
Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: 20 srp 2008 14:02
Bydliště: Brno
Kontaktovat uživatele:

Re: [C]Detekce konstanty

Příspěvek od CZechBoY »

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
Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7415
Registrován: 23 pro 2010 09:23

Re: [C]Detekce konstanty

Příspěvek od faraon »

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)
Zamčeno
  • Podobná témata
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Detekce síťového (RJ45) kabelu pod omítkou
    od Ghoust23 » » v Sítě - hardware
    8 Odpovědi
    18418 Zobrazení
    Poslední příspěvek od šulda

Zpět na „Programování a tvorba webu“