在C中,如果我运行malloc(1)
两次然后打印输出到a的两个值uintptr_t
,则值相差32.例如,
void * last = malloc(1);
void * next = malloc(1);
printf("orig %lu\n", ((uintptr_t)last));
printf("next %lu\n", ((uintptr_t)next));
Run Code Online (Sandbox Code Playgroud)
打印出来
orig 30572560
next 30572592
Run Code Online (Sandbox Code Playgroud)
malloc(size_t size)
根据这个,分配大小字节.当我malloc
一个字节,然后是另一个字节时,我希望该值增加8 .为什么它们相差32?谢谢!
这实际上是不同编译器/标准libriaries之间的实现细节.通常,无法保证您的后续malloc
调用将返回相邻的内存区域.另请注意,每个内存区域都与其他元数据相关联,包括但不限于区域大小(否则无法知道free
运行时要释放多少内存).此元数据通常放在已分配的区域内,使其大于请求的大小.还有一些其他因素会影响实际分配的内存量 - 内存对齐和实现使用的"漏洞"查找算法malloc
等.