DAVIDOWITCH: no, čirou náhodou jsem hned v předchozím příspěvku
[ XCHAOS @ ANSI C/C99 (specifikace), GNU C (gcc, glibc), Tiny C (tcc) a POSIX - ne nutně C++,g++,libstdc++ nebo Win32 API ] jsem svůj záměr vysvětlil...
ANT_39: asprintf() znám a líbí se mi... až na to, že nechci záviset jen na mallocu(). vlastně ano... u toho svého get_str() (či jak se to bude jmenovat) plánuju ještě mutaci get_str(), která se bude lišit tím, že místo prostého řetězení se použije první parametr jako formátovací string pro sprintf()... jde čistě jen o to, že nechci záviset na malloc(), protože si nechci pamatovat na které všechny pointery bude nutné ručně zavolat free().
REDGUY: dobře, tak aby si neřekl:
REDGUY: ...odpovědi na zbývající otázky:
- nevidím nic špatného na tom mít jako jeden z přepínatelných režimů alokace konzervativní malloc() - a použít ho např. když budu chtít implementovat ve svém toolkitu nějakou veřejnou knihovní funkci a alokovat konzervativním způsobem prostor pro její návratovou hodnotu. nicméně chci mít možnost triviálním způsobem přepínat ještě minimálně mezi dvěma dalšími způsoby alokace, u kterých bych tak či onak nemusel volat free() - a dealokace by navíc byla blesková (tedy, i ta alokace - což mimochodem taky chci přesně proměřit, jestli zvládnu více alokací za sekundu, než malloc())
- v čem jsou přesně nedostatečné? jednoduše si nechci pamatovat, co vše musím na konci dealokovat. často používám několik "dočasných proměnných" (například pointeru na stringy), jejichž obsah se průběžně mění pomocí aktuální situace - a na konci prostě už nevím, co vše jsem alokoval, na co chvíli ukazovaly. nechci pro 10 po sobě jdoucích aktivit deklarovat deset různých jednoúčelových proměnných jen proto, abych je na konci mohl dealokovat. nechci ani manuálně dealokovat po každé alokaci, apod.
- jestli chci být v něčem nejlepší, to je zajímavá otázka :) chci být nejlepší v uživatelské přítulnosti pro moje vlastní použití. tedy je to v podstatě forma programátorské onanie - na čemž ovšem nevidím nic špatného :-)
- s jinejma knihovnama by to mělo fungovat tak, že o tom nebudou věddět: nechci jim podsouvat jinej "univerzální" malloc() - chci jen sám občas použít něco jiného než malloc(), když to uznám za vhodné.
- jaká je v případě C "koncepce celého jazyka", to je velká otázka - např. ostatní moje makra jsou obecně speciálním případem věcí jako va_args() (což je taky dost bordel, ale současně i součást "koncepce").
C obecně rozlišuje "lokální" a "globální" - jedna možnost je, že každá další funkce by podle měla implicitně alokovat s využitím globální alokační funkce, dokud není definován lokální override. a nebo může funkce pokačovat dle aktuálně nastaveného kontextu - pokud si výslovně neřekne, že chce něco dělat jinak...
v krajním případě by alokační strategie mohly být jen dvě: "chci malloc" (včetně toho, že si ručně zavolám) a "chci zapomenout vše alokované odsud až podsud". já celou dobu žiju v domění, že je praktické vymýšlet ještě nějakou "třetí cestu", ale možná je to overkill.