Home COM GDI+ WebBrowser Data Access

IMalloc Interface

 

IID_IMalloc

{00000002-0000-0000-C000-000000000046}

 

 

The IMalloc interface allocates, frees, and manages memory.

 

Call the methods of IMalloc to allocate and manage memory. The COM libraries and object handlers also call the IMalloc methods to manage memory. Object handlers should call CoGetMalloc to get a pointer to the IMalloc implementation on the task allocator object and use the implementation of those methods to manage task memory.

 

The IMalloc methods Alloc, Free, and Realloc are similar to the C library functions malloc, free, and realloc. For debugging, refer to the functions CoRegisterMallocSpy and CoRevokeMallocSpy.

 

Note: To get the interface pointer to the memory allocator use:

 

DIM hr AS LONG

DIM pMalloc AS DWORD

hr = CoGetMalloc (1, VARPTR(pMalloc))

 

We need to use VARPTR(pMalloc) because this parameter has been wrongly declared as BYVAL instead of BYREF in Win32Api.inc.

 

 

Methods in VTable order

IUnknown Methods

Description

QueryInterface

Returns pointers to supported interfaces.

AddRef

Increments reference count.

Release

Decrements reference count.

IMalloc Methods

Description

Alloc

Allocates a block of memory.

Realloc

Changes the size of a previously allocated block of memory.

Free

Frees a previously allocated block of memory.

GetSize

Returns the size in bytes of a previously allocated block of memory.

DidAlloc

Determines whether this instance of IMalloc was used to allocate the specified block of memory.

HeapMinimize

Minimizes the heap by releasing unused memory to the operating system.

 

Alloc

 

FUNCTION IMalloc_Alloc ( _

  BYVAL pthis AS DWORD PTR _

, BYVAL cb AS DWORD _

  ) AS DWORD
 

  LOCAL DWRESULT AS LONG
  CALL DWORD @@pthis[3] USING IMalloc_Alloc (pthis, cb) TO DWRESULT
  FUNCTION = DWRESULT
 

END FUNCTION

 

 

 

FUNCTION IMalloc_Alloc ( _

  BYVAL pthis AS DWORD PTR _

, BYVAL cb AS DWORD _

  ) AS DWORD
 

  ! push cb
  ! mov  eax, pthis
  ! push eax
  ! mov  eax, dword ptr[eax]
  ! call dword ptr[eax+12]
  ! mov  FUNCTION, eax


END FUNCTION

 

 

Realloc

 

FUNCTION IMalloc_Realloc ( _

  BYVAL pthis AS DWORD PTR _

, BYVAL pv AS DWORD _

, BYVAL cb AS DWORD _

  ) AS DWORD
 

  LOCAL DWRESULT AS LONG
  CALL DWORD @@pthis[4] USING IMalloc_Realloc (pthis, pv, cb) TO DWRESULT
  FUNCTION = DWRESULT
 

END FUNCTION

 

 

 

FUNCTION IMalloc_Realloc ( _

  BYVAL pthis AS DWORD PTR _

, BYVAL pv AS DWORD _

, BYVAL cb AS DWORD _

  ) AS DWORD
 

  ! push cb

  ! push pv
  ! mov  eax, pthis
  ! push eax
  ! mov  eax, dword ptr[eax]
  ! call dword ptr[eax+16]
  ! mov  FUNCTION, eax

 

END FUNCTION

 

 

Free

 

SUB IMalloc_Free ( _

  BYVAL pthis AS DWORD PTR _

, BYVAL pv AS DWORD _

  )
 

  CALL DWORD @@pthis[5] USING IMalloc_Free (pthis, pv)
 

END SUB

 

 

 

SUB IMalloc_Free ( _

  BYVAL pthis AS DWORD PTR _

, BYVAL pv AS DWORD _

  )

 

  ! push pv
  ! mov  eax, pthis
  ! push eax
  ! mov  eax, dword ptr[eax]
  ! call dword ptr[eax+20]
 

END SUB

 

 

GetSize

 

FUNCTION IMalloc_GetSize ( _

  BYVAL pthis AS DWORD PTR _

, BYVAL pv AS LONG _

  ) AS DWORD
 

  LOCAL DWRESULT AS DWORD
  CALL DWORD @@pthis[6] USING IMalloc_GetSize (pthis, pv) TO DWRESULT
  FUNCTION = DWRESULT
 

END FUNCTION

 

 

 

FUNCTION IMalloc_GetSize ( _

  BYVAL pthis AS DWORD PTR _

, BYVAL pv AS LONG _

  ) AS DWORD
 

  ! push pv
  ! mov  eax, pthis
  ! push eax
  ! mov  eax, dword ptr[eax]
  ! call dword ptr[eax+24]
  ! mov  FUNCTION, eax

 

END FUNCTION

 

 

DidAlloc

 

FUNCTION IMalloc_DidAlloc ( _

  BYVAL pthis AS DWORD PTR _

, BYVAL pv AS DWORD _

  ) AS LONG
 

  LOCAL LRESULT AS LONG
  CALL DWORD @@pthis[7] USING IMalloc_DidAlloc(pthis, pv) TO LRESULT
  FUNCTION = LRESULT
 

END FUNCTION

 

 

 

FUNCTION IMalloc_DidAlloc ( _

  BYVAL pthis AS DWORD PTR _

, BYVAL pv AS DWORD _

  ) AS LONG
 

  ! push pv
  ! mov  eax, pthis
  ! push eax
  ! mov  eax, dword ptr[eax]
  ! call dword ptr[eax+28]
  ! mov  FUNCTION, eax

 

END FUNCTION

 

 

HeapMinimize

 

SUB IMalloc_HeapMinimize (BYVAL pthis AS DWORD PTR)
   CALL DWORD @@pthis[8] USING IMalloc_HeapMinimize(pthis)
END SUB

 

 

 

SUB IMalloc_HeapMinimize (BYVAL pthis AS DWORD PTR)


  ! mov  eax, pthis
  ! push eax
  ! mov  eax, dword ptr[eax]
  ! call dword ptr[eax+32]
 

END SUB

 

 

Page last updated on Thursday, 16 March 2006 06:04:34 +0100