А что лучше для си: Выделение памяти или обычные переменные
Некоторые библиотеки выделяют память для структур.
А что будет лучше?
Из двух выбора
#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 шт):
Оба варианта хороши в своих случаях. Но в целом, если структура создается в функции и покидает ее, что бы быть использованной в другом месте - скорее всего нужно создавать динамически, например, если это структура, которая передается в кол-бек (можно конечно сделать и глобальной).
Вторая мотивация - стек не резиновый и ограничен. В лучшем случае там от 1 до 8 мегабайт. И если Ваша структура занимает больше, то преимущества malloc очевидны.
А ещё бывают микроконтроллеры. А там все ещё интереснее. там может быть так, что нужно только определенным способ и никак иначе.
Так что тут нет серебряной пули.
P.S. функция makeStruct в первом случае скорее должна называться fillStruct или что то подобное.