Home | History | Annotate | Download | only in allocator
      1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 // This is a simple allocator based on the windows heap.
      6 
      7 extern "C" {
      8 
      9 HANDLE win_heap;
     10 
     11 bool win_heap_init(bool use_lfh) {
     12   win_heap = HeapCreate(0, 0, 0);
     13   if (win_heap == NULL)
     14     return false;
     15 
     16   if (use_lfh) {
     17     ULONG enable_lfh = 2;
     18     HeapSetInformation(win_heap, HeapCompatibilityInformation,
     19                        &enable_lfh, sizeof(enable_lfh));
     20     // NOTE: Setting LFH may fail.  Vista already has it enabled.
     21     //       And under the debugger, it won't use LFH.  So we
     22     //       ignore any errors.
     23   }
     24 
     25   return true;
     26 }
     27 
     28 void* win_heap_malloc(size_t size) {
     29   return HeapAlloc(win_heap, 0, size);
     30 }
     31 
     32 void win_heap_free(void* size) {
     33   HeapFree(win_heap, 0, size);
     34 }
     35 
     36 void* win_heap_realloc(void* ptr, size_t size) {
     37   if (!ptr)
     38     return win_heap_malloc(size);
     39   if (!size) {
     40     win_heap_free(ptr);
     41     return NULL;
     42   }
     43   return HeapReAlloc(win_heap, 0, ptr, size);
     44 }
     45 
     46 size_t win_heap_msize(void* ptr) {
     47   return HeapSize(win_heap, 0, ptr);
     48 }
     49 
     50 }  // extern "C"
     51