Я прошел через проект C, чтобы понять некоторые понятия и нашел следующий код.Как определить общее распределение памяти?
#define MY_NODE_ALLOC(coffee) ((struct items *)(coffee) + 1)
struct store
{
char *name;
int id;
};
struct items
{
char *itemName
char *itemCode;
int quantity;
};
void * allocation(struct store *shop)
{
struct items *coffee = malloc(sizeof(struct items) + sizeof(*shop));
return MY_NODE_ALLOC(coffee);
}
я следующие вопросы
Сколько общей памяти выделяется? он равен размеру
*shop
иstruct items
?В чем разница между 2 заявления
malloc(sizeof(struct itmes));
иmalloc(sizeof(*shop));
Что возвращает этот макрос? По моему мнению, добавление 1 к указателю используется для перехода к следующему элементу в массиве, но я не понимаю этого случая.
Общее распределение составляет _at наименьшее, как указано значение (при успешном); на практике это всегда больше (для накладных расходов malloc) и игнорирования накладных расходов malloc, по-прежнему, вероятно, больше (для проблем с выравниванием). – mah
@mah Правда в целом, но не упоминается в стандарте. C11/7.22.3.4 _ Функция malloc выделяет пространство для объекта, размер которого задается size_ .... –
Malloc также захватывает память с ОС - это большие куски, чтобы ограничить переключение контекста. –