请问为什么以下情况会发生:
我有两台电脑:
- 我的工作电脑
- 服务器
我维护一个C++程序(使用msvc 2005 c++编译),在服务器上运行速度过慢,但在我的电脑上却没有问题。
我进行了测量(使用GetThreadTimes等方法),可以明确地说瓶颈就在于内存分配(new/malloc)。而这种情况只出现在服务器上!
我认为这是由于内存碎片化导致的,因为第一次在服务器上运行程序实例时,它的表现良好,但当数据重新加载到内存中后(1-1.5百万个内存分配/释放),它开始在内存分配方面浪费时间。
如果我在两台电脑上都看到了由于内存碎片化而出现的相同行为,我也不会感到太惊讶,但事实并非如此:
- 在我的电脑上,内存分配占用时间的比例约为5%(不是精确值,但大致如此)。
- 在服务器上,这些内存分配占用时间的比例约为75%。
为什么C++内存分配在服务器上会变慢,而在我的工作电脑上却没有问题?两者之间有什么区别?可能与操作系统级的内存管理函数有关吗?因为在这两种情况下,C++级别的管理器是相同的。
以下是两台电脑的配置:
1. 我的电脑(内存分配约占5%):
OS Name: Microsoft Windows 7 Enterprise
OS Version: 6.1.7600 N/A Build 7600
OS Manufacturer: Microsoft Corporation
OS Configuration: Member Workstation
OS Build Type: Multiprocessor Free
Registered Owner: Windows User
Original Install Date: 16/09/2011, 19:37:43
System Boot Time: 05/04/2013, 11:58:11
System Model: 7304A58
System Type: x64-based PC
Processor(s): 1 Processor(s) Installed.
[01]: Intel64 Family 6 Model 23 Stepping 10 GenuineIntel ~2642 Mhz
Windows Directory: C:\Windows
System Directory: C:\Windows\system32
Boot Device: \Device\HarddiskVolume2
System Locale: ru;Russian
Input Locale: en-us;English (United States)
Total Physical Memory: 4,061 MB
Available Physical Memory: 872 MB
Virtual Memory: Max Size: 8,121 MB
Virtual Memory: Available: 4,579 MB
Virtual Memory: In Use: 3,542 MB
Page File Location(s): C:\pagefile.sys
2). 服务器(分配占用约75%):
OS Name: Microsoft(R) Windows(R) Server 2003, Enterprise Edition
OS Version: 5.2.3790 Service Pack 2 Build 3790
OS Manufacturer: Microsoft Corporation
OS Configuration: Member Server
OS Build Type: Multiprocessor Free
Original Install Date: 11/12/2008, 01:22:57
System Up Time: 1 Days, 8 Hours, 35 Minutes, 52 Seconds
System Manufacturer: HP
System Model: ProLiant BL685c G5
System Type: X86-based PC
Processor(s): 4 Processor(s) Installed.
[01]: x86 Family 16 Model 2 Stepping 3 AuthenticAMD ~2210 Mhz
[02]: x86 Family 16 Model 2 Stepping 3 AuthenticAMD ~2210 Mhz
[03]: x86 Family 16 Model 2 Stepping 3 AuthenticAMD ~2210 Mhz
[04]: x86 Family 16 Model 2 Stepping 3 AuthenticAMD ~2210 Mhz
Windows Directory: C:\WINNT
System Directory: C:\WINNT\system32
Boot Device: \Device\HarddiskVolume1
Total Physical Memory: 65,534 MB
Available Physical Memory: 61,284 MB
Page File: Max Size: 97,696 MB
Page File: Available: 93,445 MB
Page File: In Use: 4,251 MB
Page File Location(s): C:\pagefile.sys
D:\pagefile1\pagefile.sys
D:\pagefile2\pagefile.sys
D:\pagefile3\pagefile.sys
D:\pagefile4\pagefile.sys
D:\pagefile5\pagefile.sys
D:\pagefile6\pagefile.sys
D:\pagefile7\pagefile.sys
非常感谢您解答这个问题。