void* memory_allocate_zero( uint64_t size, unsigned int align, memory_hint_t hint )
{
	void* p;
	if( ( hint == MEMORY_TEMPORARY ) && _memory_temporary.storage && ( size + align < _memory_temporary.maxchunk ) )
	{
		align = _memory_get_align( align );
		p = _memory_align_pointer( _atomic_allocate_linear( size + align ), align );
		memset( p, 0, (size_t)size );
	}
	else
	{
		p = _memsys.allocate_zero( memory_context(), size, align, hint );
	}
	_memory_track( p, size );
	return p;
}
void* memory_allocate_zero_context( uint16_t context, uint64_t size, unsigned int align, memory_hint_t hint )
{
	void* p = _memsys.allocate_zero( context, size, align, hint );
	_memory_track( p, size );
	return p;
}