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

C - allocators... – C / C++ – Fórum – Programujte.comC - allocators... – C / C++ – Fórum – Programujte.com

 

nigaloslav0
Newbie
23. 10. 2015   #1
-
0
-

Ahoj,

jelikoz pisu program, ktery pracuje s relativne velkym objemem pameti (ktere je rozdelena na male kousicky), napsal jsem si jednoduchy allokator (proste zavola malloc a pote prideluje zarovnane casti pameti...)

Nicmene si nejsem prilis jisty pouzitim. Je jasne, ze pokud mam nejaka surova data (strindy, struktury cisel apod.), pak je dobre je alokovat pomoci allokatoru.

Co kdyz mam ale strukturu, ktera obsahuje dalsi struktury (v cetne alokatoru) [typedef je tam kvuli konzistenci, bohuzel].

typedef struct ffcommand_part {
	int    max;                /**< MAX value of order(sort) attribute. Default val. = 0 */
	int    min;                /**< MIN value of order(sort) attribute. Default val. = 0 */
	list_t list;               /**< */
} ffcommand_part_t;
typedef struct ffcommand {
    allocator_t* allocator;
    ffcommand_part_t* video;
    ffcommand_part_t* audio;
    ffcommand_part_t* input;   /**< input (with options) for ffmpeg */
    ffcommand_part_t* output;  /**< output  (with options) */
} ffcommand_t;

void ffcommand_init(ffcommand_t* command) {
	struct allocator* allocator = malloc(sizeof(allocator_t)); CHMOC(command->allocator);
	allocator_init(allocator, 0);

	void* _al = allocator_malloc(allocator, 4 * sizeof(ffcommand_part_t)); // ??? ??? ???
	*command = (struct ffcommand) {
			.allocator = allocator;
			.video     = (ffcommand_part_t*)_al;
			.audio     = (ffcommand_part_t*)(_al + 1 * sizeof(ffcommand_part_t));
			.input     = (ffcommand_part_t*)(_al + 2 * sizeof(ffcommand_part_t));
			.output    = (ffcommand_part_t*)(_al + 3 * sizeof(ffcommand_part_t));
	};

	ffcommand_part_init(command->video);
	ffcommand_part_init(command->audio);
	ffcommand_part_init(command->input);
	ffcommand_part_init(command->output);
}

Pra danou strukturu alokuji alokator a pote pomoci tohoto alokatoru ziskam pamet pro struktury "audio", "video", "input", "output".

Dulezite je si uvedomit, ze alokator se pouziva hlavne pro plneni "audio", "video", ... spojaku hodnotami...

Smotny jsem vuci tomuto zpusobu rozpolcen, ale nemohu najit padne argumenty, proc takto neinicializovat strukturu, ktera obsahuje zbrusu novy alokator?

Takze se ptam - prijde vam takovato inicializace v poradku? Pokud ano/ne, proc?

Diky,

Honza

Nahlásit jako SPAM
IP: 2001:1ab0:f15:0:f2de:f1ff...–
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, 34 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ý