【发布时间】:2011-07-01 18:06:46
【问题描述】:
我有这样的课程(假设所有 malloc 成功)
class CMyClass
{
public:
CMyClass()
{
lpData = malloc(128);
};
~CMyClass()
{
free(lpData);
};
public:
LPVOID lpData;
};
然后我执行这个:
CMyClass *lpList = new CMyClass[32768];
delete [] lpList;
问题在于,在 x86 中代码运行良好且快速(在调试和发布版本中完成几毫秒),但在 x64 中,删除调用大约需要 15 秒才能释放所有内存。
操作系统是Win7 x64。
提示将不胜感激。
问候, 毛罗。
【问题讨论】:
-
我很好奇,你为什么选择在类中使用 malloc()/free() 而不是 new/delete?还有,你的编译器是什么?
-
malloc和free由您的编译器提供,而不是由 Windows 提供。在我们能够尝试任何事情之前,您需要告诉您的编译器。作为记录,在我使用 VS2010Sp1 的机器上,我没有看到这种行为。 -
malloc和free不是由编译器提供的,它们位于 MSVCRTxx.DLL 中。他们最终致电HeapAlloc(在Windows 上)。编译器不提供函数,它只是编译。链接器只是链接。 -
内部 malloc/free 使用与 new/delete 相同的例程,但问题不在于函数。这是操作系统变慢的特殊调试堆。
标签: c++ performance 64-bit heap-memory free