Memory API Wrappers

. You can also find this and other articles at his web site at

  • One size private heap class CWizOneSizeHeap.
    I wrote this class for very common situation: when you have to allocate
    many of small objects of the same size; the obvious case is some class widely used in a program. The assumption that all objects on the heap are of the same size allows to minimize allocation overhead to zero. Indeed, every allocation block in the regular heap is preceded by block size. But when the size is known in advance, you could save this place. The technique is simple: the heap manager requests big blocks of the memory from some common heap. Every block of memory is either occupied by allocated
    object, or points to the next free block. Therefore it manages "in place" linked list of free items without any overhead. The sources are here.
    NB: Feel free to remove inlines if you're more concerned about size then about speed.
  • Local heap class CWizLocalHeap - wrapper for Win32 API local heap machinery.
    Helper class CWizLocalHeapLock useful for locking the heap in the multithreading environment.
  • Template class CWizTypedLocalHeap derived from CWizLocalHeap to avoid mess with local heap parameters.
    Class CWizDefaultTypedLocalHeap derived from CWizTypedLocalHeap and supplies reasonable default parameters.
    Define DECLARE_LOCAL_HEAP forces objects of any class to be allocated from it's own private local heap. Very useful in new-intensive algorithms.
    Files TypedLocalHeap.CPP and TypedLocalHeap.H .
  • Virtual memory class CWizVirtualMemory - wrapper for Win32 API virtual memory machinery.
    Derived template class CWizTypedVMem to be used as virtual array.
    Files VIRT_MEM.H and VIRT_MEM.CPP .
  • Memory mapped file wrappers:
    • CWizFileMapping - kind of file mapping wrapper.
    • CWizFileMapView - view of this mapping (actual memory address).
    • template <class TYPE> class CWizFileView - kind of "virtual array" mirroring a file.
    • template <class TYPE> class CWizROFileView - read-only view (virtual array) of an existing file.
    • CWizFullFileView - read/write file mapping. Uses CWizTempFileStrategy for managing temporary files.
    • template <class TYPE> class CWizTypedFullFileView - typed derivative of CWizFullFileView.

    Files FILE_MAP.H and FILE_MAP.CPP .

    • CWizFileROFileMapping - implements "windowed" view to memory mapping.Useful when address space is low or when access to the file is rare.
      Nested class Window acts like actual window to the mapping and moves itself by demand.
      This class has template parameter LOCKER which implements multithreading synchronization for Window objects. Two classes supplied for this:
    • CWizFileMapNoLocker - no locking and synchronization. Useful when:

      a) only single thread accesses the view or
      b) another synchronization implemented in your application or
      c) you are absolutely sure it's no need for synchronization.

    • CWizFileMapCritSectLocker - uses critical section for synchronization between threads.

      Please note that synchronization is managed only when retrieving the view from memory mapping. Every view supposed to be thread-specific or at protected by another way.

    • template<class LOCKER, class DATA> class CWizTypedFileROFileMapping -
      typed derivative of CWizFileROFileMapping (like virtual array of structs).
      Because of strange compilation errors -:) the nested class is called Wnd instead of Window.

    Files FileMapWindow.H and FileMapWindow.CPP .


    • Bug Fix

      Posted by Legacy on 01/21/2000 12:00am

      Originally posted by: Luiz Kogut

      At first, I'd like to thank you for the code. It was very useful to me.
      I found a bug when you need to allocate more objects than the free size of your buffer. Here is the correction:

      Change the old implementation for the function CWizOneSizeHeap<TYPE, ALLOCATOR>::InitPointers () by this new one...

      template<class TYPE, class ALLOCATOR>
      void CWizOneSizeHeap<TYPE, ALLOCATOR>::InitPointers ()
      int nStep = m_nStep - 1;
      DATA *p = m_pFirstFree;

      for (int i = 0; i < nStep; i++, p++)
      p->next = p + 1;

      p->next = NULL;

    • Where is the ZIP file?

      Posted by Legacy on 11/22/1999 12:00am

      Originally posted by: Danang Suharno

      It would be better if you put all the .h and .cpp files
      to a .ZIP file!!!!


    Leave a Comment
    • Your email address will not be published. All fields are required.

    Top White Papers and Webcasts

    • U.S. companies are desperately trying to recruit and hire skilled software engineers and developers, but there's simply not enough quality talent to go around. In response, companies often resort to inferior solutions -- hiring substandard developers and engineers, recruiting talent on a part-time or temporary basis, poaching people from competitors, or burdening an already stressed IT staff for more of their labor. Fortunately, there's a better solution. Read this white paper to learn the business value of …

    • Lenovo recommends Windows 8 Pro. "I dropped my laptop getting out of the taxi." This probably sounds familiar to most IT professionals. If your employees are traveling, you know their devices are in for a rough go. Whether it's a trip to the conference room or a convention out of town, any time equipment leaves a user's desk it is at risk of being put into harm's way. Stay connected at all times, whether at the office or on the go, with agile, durable, and flexible devices like the Lenovo® …

    Most Popular Programming Stories

    More for Developers

    RSS Feeds

    Thanks for your registration, follow us on our social networks to keep up-to-date