我正在阅读Windows内存管理。在那里我读到了VirtualAlloc()和堆函数。我理解这两个概念。但是当我开始比较它们时,我感到很困惑。
我在网上搜索了这些概念,我找到了很多答案。但读完之后我仍然感到困惑。所以为了澄清我的疑问,我问的问题很少。您可能会觉得这些问题是重复的。
1)当我们调用VirtualAlloc()时,从哪里得到内存形式?或者如果我们从HeapAlloc()获取内存,则称为堆内存,如果我们从VirtualAlloc()获取内存,则称为?
2)如果我们从VirtualAlloc()和HeapAlloc()获得的内存来自虚拟地址,或者如果内存没有差异,那么为什么我们需要它们。
3)我读过,如果我们想分配大块内存(100MB),那么我们需要调用VirtualAlloc()。如果我使用HeapAlloc()分配大块内存(100 MB)会发生什么。如果它工作正常,那么为什么我们需要virtualAlloc()。4)我读到malloc()和new运算符在内部为samller对象调用HeapAlloc(),为更大的对象调用VirtualAlloc()。我的问题:在Windows中为用户模式分配内存我们只有这两个API(virtualAlloc和HeapAlloc())。
5)在视觉工作室设置中 - >链接器 - > system - >堆储备大小为1MB。这与流程的默认堆相同。
请帮助我理解这些概念。如果你知道关于这个概念的任何好的链接或好书。