0

我是 C 的新手,我对分配器在 C 中可以做什么感到困惑。

正如标题所问,如果需要,分配器可以使用未初始化的数据段来满足堆请求吗?

4

1 回答 1

2

术语“内存分配器”在定义 C 语言的标准中没有任何意义。但是,它们确实定义了 C 运行时库必须提供的一组“内存管理功能”,因此我假设您要询问的是这些功能。

这些标准也没有定义从哪里甚至如何分配内存,只是函数malloc,calloc和必须存在并且具有指定的语义reallocfree因此,由实现决定从哪里分配内存。

术语“未初始化的数据段”通常是指已编译的可执行文件的一部分,它指定加载程序应保留一定数量的内存供程序使用。

在我知道的所有实现中(或者至少是那些术语“未初始化的数据段”有意义的实现),该部分用于未初始化的静态变量。

在大多数实现中,C 运行时将通过调用 OS 内核以获取内存块来形成堆,然后将其分配给程序。

这里有一个关于 Linux 中进程内存布局的很好的描述。

于 2017-02-22T05:15:49.057 回答