The memdebug library uses two internal routines, memdebug_untraced_alloc and memdebug_untraced_free to actually allocate and free the memory it tracks. The default implementations of these routines use the initial system memory object (see Section 13.4). An implication of this is that the unwrapped malloc and the memdebug wrapped malloc can have different policies. This would be the case if the client OS has provided its own implementation of malloc not based on the system memory object.
When allocating memory on small alignment boundaries, those boundaries will actually be bumped up to the alignment necessary for the leading fence-post of the allocation. Thus, when running under memdebug data may be aligned at a larger granularity than when running without memdebug.
All of the routines use memdebug_printf to print all output. This function should always be defined such that it guarantees that it will never cause any memory to be allocated. You should override this if you cannot guarantee that vfprintf calls will not allocate memory.