How do I workaround heap fragmentation in a C++ server program?

后端 未结 4 1979
小蘑菇
小蘑菇 2020-12-19 19:57

Heap fragmentation can cause a server application that is expected to run continuously for many months to suddenly start malfunctioning thinking that it\'s out of memory.

4条回答
  •  清歌不尽
    2020-12-19 20:39

    A good starting point is to enable the low fragmentation heap and check weather it still fragments.

      HANDLE heaps[1025];
      DWORD nheaps = GetProcessHeaps((sizeof(heaps) / sizeof(HANDLE)) - 1, heaps);
      for (DWORD i = 0; i < nheaps; ++i) {
        ULONG  enableLFH = 2;
        HeapSetInformation(heaps[i], HeapCompatibilityInformation, &enableLFH, sizeof(enableLFH));
      }
    

    This newly introduced memory manager is switched on by default on Vista/Server 2008 ... So if you determine that world is better on newer Server OS this might be the reason.

    The low fragmentation heap was introduced with a service pack of Windows 2000 but it has to be aktively enabled till Windows Vista.

    There is a tool vmmap which gives an overview on memory easy and gives a good overview if fragmentation happens.

提交回复
热议问题