gpt4 book ai didi

c++ - 是否有最小堆大小

转载 作者:太空宇宙 更新时间:2023-11-04 01:50:52 35 4
gpt4 key购买 nike

我在一台 32 位的旧机器上。并想深入了解事情的进展情况。这个系统上的堆实现真的很老,我认为它使用了一个更老的 malloc 算法。现在我的问题是。这是我的程序。

#include <stdio.h>
#include <stdlib.h>

struct fp {

int (*fpd)();
};

int main()
{
int *ptr;
malloc(sizeof(struct fp));
printf("Size:%d\n",sizeof(struct fp));
return 0;
}

如果我运行该程序,输出为 4。所以堆 block 大小应该是 4byte header + 4byte size + 4byte(sizeof struct)所以堆应该是 12 字节等于 0xc

但是如果我查看 gdb 中的堆,它会告诉我一 block 0x10 的大小等于 16 个字节,但其他 4 个字节来自哪里。这让我很困惑!

或者是否有可能存在最小块大小,即 0x10?

最佳答案

Is there a minimal Heap Size (?)

听起来 OP 想知道最小分配大小,而不是“堆”的总大小。


所有 *alloc(),当成功返回非 NULL(** 见下文)时,“产生一个指向与任何其他对象不相交的对象的指针。” C11 §7.22.3 1.

所有此类指针都满足基本对齐要求。

基本对齐方式“等于_Alignof(max_align_t)”§6.2.8 2

因此 sizeof(max_align_t),示例 4,是“堆”分配的最小下限,所有分配也将是 4 的倍数。

通常分配会导致每次分配的开销,有时仅为 1 sizeof(max_align_t)。在我们的示例系统中,下限将为 8。

is it possible that a minimum chunksize exists which is 0x10?

是的。出于性能原因或为了尽量减少碎片,分配可能会将最小大小进一步限制为某个下限,例如 16。@ John Bollinger

绝对较低的分配大小因平台而异。除了满足 基本对齐 的约束外,C 并未指定 Is。


** 细节:malloc(0) 可以成功返回 NULL,所以可以说在这种病态情况下,最小分配大小为 0。

关于c++ - 是否有最小堆大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43356079/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com