А что лучше для си: Выделение памяти или обычные переменные

Некоторые библиотеки выделяют память для структур.

А что будет лучше?

Из двух выбора

#include <stdlib.h>

struct test_t
{
 int a;
 int b;
};

void fillStruct(struct test_t* strct)
{
 strct->a = 5;
 strct->b = 7;
}

int main()
{
 struct test_t fff;
 fillStruct(&fff);
}

и

#include <stdlib.h>

struct test_t
{
 int a;
 int b;
};

void fillStruct(struct test_t** strct)
{
 *strct = malloc(sizeof(struct test_t));
 *strct->a = 5;
 *strct->b = 7;
}

int main()
{
 struct test_t* fff;
 fillStruct(&fff);
}

(Не надо обращать на утечку памяти!)


Ответы (1 шт):

Автор решения: KoVadim

Оба варианта хороши в своих случаях. Но в целом, если структура создается в функции и покидает ее, что бы быть использованной в другом месте - скорее всего нужно создавать динамически, например, если это структура, которая передается в кол-бек (можно конечно сделать и глобальной).

Вторая мотивация - стек не резиновый и ограничен. В лучшем случае там от 1 до 8 мегабайт. И если Ваша структура занимает больше, то преимущества malloc очевидны.

А ещё бывают микроконтроллеры. А там все ещё интереснее. там может быть так, что нужно только определенным способ и никак иначе.

Так что тут нет серебряной пули.

P.S. функция makeStruct в первом случае скорее должна называться fillStruct или что то подобное.

→ Ссылка