« Выделение памяти » в C обычно относится к явному выделению (например, в куче - malloc()
и другие) или неявному выделению (например, в стеке).
Как вы определили, sizeof()
возвращает размер типа данных:
sizeof(char)
- одиночный char
sizeof(void *)
- an void
указатель
Если вы вызываете malloc(sizeof(int))
, вы запрашиваете « достаточно памяти для хранения данных для int
», что может быть 4 байта на вашем system ... вы можете обнаружить, что выделено больше памяти, чем вы запрашивали (хотя обычно это будет скрыто от вас, см. canaries ).
Кроме того, если вы позвоните int *x = malloc(1024)
, и sizeof(*x)
, вы можете получить 4
, потому что int
составляет 4 байта ... даже если выделенная вами память составляет 1 КиБ. Если вы неправильно набрали sizeof(x)
, вы получите размер возвращаемого указателя, а не размер типа, на который он указывает. Ни один из них (sizeof(*x)
или sizeof(x)
) не вернет 1024
.