В своих более ранних ответах tekknolagi и Als оба верны.Если вы попытаетесь выполнить этот фрагмент кода, это может помочь осветить происходящее.
// cc -o test test.c
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
struct rec {
uint16_t vals[500];
};
int main (int argc, char const *argv[])
{
printf("struct rec is %ld bytes.\n", sizeof(struct rec));
struct rec* rec_p = (struct rec*)malloc(sizeof(struct rec));
free(rec_p);
}
Когда вы выполните этот код, вы увидите:
struct rec is 1000 bytes.
Вы звонили только malloc
один раз.Этот вызов выделил все пространство, описанное вашим определением структурыСоответствующее free
также освобождает всю эту память.