Windows内存管理:VirtualAlloc()和堆函数之间的区别

时间:2016-02-19 11:14:16

标签: windows winapi visual-c++ memory memory-management

我正在阅读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。这与流程的默认堆相同。

请帮助我理解这些概念。如果你知道关于这个概念的任何好的链接或好书。

0 个答案:

没有答案