什么是堆栈的"标准"大小和C程序中的堆?

Jul*_*Vga 6 c heap stack

我已经读过Linux上的"标准"和初始堆栈大小约为8MB,Windows大约为1MB.

但堆分配如何工作?操作系统是否为进程堆设置了"虚拟"大小,就像它对已提交和保留内存的堆栈一样?

Hot*_*cks 2

没有通用的“标准尺寸”。各个操作系统都有默认大小,但通常可以使用程序映像或命令行中的适当参数来更改它们。

C 可以在各种系统中执行,从只有几百字节可用内存的微型微处理器到具有数百 GB 的巨大处理器阵列。

在较大的系统(包括大多数 Windows 和 Linux 环境)中,堆栈和堆将分配给可以扩展的段,因此不需要预先保留最大大小的物理内存。然而,许多微控制器缺乏内存映射硬件,并且必须预先保留大小(尽管有时堆栈和堆会朝着彼此增长,因此只有一个共同的限制)。