怎么证明STL是否使用了内存池

如何证明STL是否使用了内存池?
我写了如下代码,想证明STL是否使用了内存池。
我理解:如果使用了内存池,就不会频繁的new、delete内存。
可是,有两个问题:
① MinGW 4.4下new的计数是7,delete的计数也是7:是否证明MinGW的STL没有使用内存池。
② VC10下跑时,陷入了递归调用new的怪圈,也就无法证明了。

注:不要让我看代码,看了一部分,头都大了,结果还没看明白啥。牛人,如何证明之?
谢谢!

C/C++ code
#include <iostream>
#include <vector>
#include <stdlib.h>

using namespace std;

void* operator new(size_t size)
{
    static int cnt;
    cout << "new: " << ++cnt << endl;
    return ::malloc(size);
}

void operator delete(void* p)
{
    static int cnt;
    cout << "delete: " << ++cnt << endl;
    ::free(p);
}

int main()
{
    vector<int> v1(1);
    int* p1 = new int(10);
    vector<int> v2(1);
    int* p2 = new int(8);
    vector<int> v3(1);
    vector<int> v4(1);
    vector<int> v5(1);
    delete p1;
    delete p2;

    return 0;
}



------解决方案--------------------
n层之后 会发现new
------解决方案--------------------
除非你在malloc里面加个static变量否则 你想用程序来证明有点不可能吧。
------解决方案--------------------
把vector的allocator自己指定一下不就成了么?
------解决方案--------------------
使用内存池,不过是不信任malloc和new对内存的分配,只相信自己的内存管理比它们牛X的行为。当每次所分配的内存都是固定大小或者不需要频繁删除内存的情况下,或许确实是比较容易做到比malloc更牛X,否则我相信绝大多数程序员所写的内存池都比malloc要垃圾。
stl不过是把内存申请到一块连续内存去(申请后有盈余),不够用了再重新申请一块连续的迁移过来,删除原来的,这种方式算不算内存池,就看LZ你怎么看待了。另外set、map、list这些东西在做了删除动作后,也无法保证原本的连续性。
最后,LZ那个call CmdTest!malloc (004099b0)中的004099b0不是指大小,而是malloc函数的地址。

------解决方案--------------------
探讨
引用:
使用内存池,不过是不信任malloc和new对内存的分配,只相信自己的内存管理比它们牛X的行为。当每次所分配的内存都是固定大小或者不需要频繁删除内存的情况下,或许确实是比较容易做到比malloc更牛X,否则我相信绝大多数程序员所写的内存池都比malloc要垃圾。
stl不过是把内存申请到一块连续内存去(申请后有盈余),不够用了再重新申请一块连续的迁移过来,删除原来的,这种方式算不算内存池,就看LZ你怎么看待了。另外set、map、list这些东西在做了删除动作后,也无法保证原本的连续性。
最后,LZ那个call CmdTest!malloc (004099b0)中的004099b0不是指大小,而是malloc函数的地址。


谢谢,可是,如何解释我重载全局的new和delete后,导致的计数变化呢?

------解决方案--------------------
只能说试探吧,因为每次从内存池分配的内存的大小一般和你实际需要的会大点,你可以每次要求的内存大一点点,看看你实际得到的内存大小是多少了.如果有几次实际所得到的内存大小相同的话就应该是从内存池分配的.
------解决方案--------------------
用内存池的好处,我以为是不把整个进程的堆弄乱,乱也只是自己那一块。
另外,分配更加快速。

------解决方案--------------------
想测试STL有没有用内存池,很简单.
你测试一下用std::allocator分配内存和用malloc分配内存的性能就知道了.
一般,如果用了内存池,在分配小对象时有比较大的性能优势.比如STLPort.
------解决方案--------------------
头次不是讨论过了吗?我联系发了两个贴:
第一:VC2008,GCC源代码不是SGI 的源代码,他们差距比较明显,只是前两者简单的封装。
第二:SGI源代码小于128btypes的时候用内存池。
------解决方案--------------------
为什么要关心stl的默认allocator是怎么实现的呢。
一般7*24的程序,必须自己接管allocator的。
------解决方案--------------------
7*24的自己接管内存是为了尽可能的减少内存碎片吧。频繁的分配和释放导致碎片率到达系统分配不了连续内存的状态时,系统就崩了...
------解决方案--------------------
回30楼,那个是SGI STL的源代码,是实现了内存池的,小于128btyes的。同
侯捷剖析的那个差不多。

VC2008 STL没有实现,也就是23楼。

实际上这很简单,比较一下文件就看出来了。


------解决方案--------------------
探讨
因为内存池的实现:只是从一块很大的内存里分隔4byte给vector <int> v(1)使用。
但从测试数据看:显然不是。