如果我连续两次malloc(1),为什么这些值相差32?

CAJ*_*CAJ 3 c memory malloc

在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?谢谢!

Krz*_*ski 5

这实际上是不同编译器/标准libriaries之间的实现细节.通常,无法保证您的后续malloc调用将返回相邻的内存区域.另请注意,每个内存区域都与其他元数据相关联,包括但不限于区域大小(否则无法知道free运行时要释放多少内存).此元数据通常放在已分配的区域内,使其大于请求的大小.还有一些其他因素会影响实际分配的内存量 - 内存对齐和实现使用的"漏洞"查找算法malloc等.