我已经通过一个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加入指针用于跳转到数组中的下一个元素,但我不明白这种情况。
总分配至少与所提供的值一样大(当成功时);在实践中,它总是更多(对于malloc开销)并且忽略malloc开销,它仍然可能更多(对于对齐问题)。 – mah
@mah一般而言,但在标准中没有提及。 C11/7.22.3.4 _ malloc函数为大小由size_指定的对象分配空间。...... –
Malloc也从OS获取内存是较大的块,以限制上下文切换。 –