pmr::resource_adaptor can avoid allocating an oversized buffer and doing manual alignment within that buffer when the wrapped allocator is known to always meet the requested alignment. Specifically, if the allocator is known to use malloc or new directly, then we can call the allocator directly for any fundamental alignment. PR libstdc++/70940 * include/experimental/memory_resource (__resource_adaptor_common::_AlignMgr::_M_unadjust): Add assertion. (__resource_adaptor_common::__guaranteed_alignment): New helper to give maximum alignment an allocator guarantees. Specialize for known allocators using new and malloc. (__resource_adaptor_imp::do_allocate): Use __guaranteed_alignment. (__resource_adaptor_imp::do_deallocate): Likewise. * testsuite/experimental/memory_resource/new_delete_resource.cc: Check that new and delete are called with expected sizes. This wouldn't be a very important optimization, because wrapping std::allocator in a pmr::resource_adaptor is probably uncommon, but pmr::resource_adaptor is used to implement pmr::new_delete_resource() in . (The C++17 version of pmr::new_delete_resource() just uses aligned new, but that isn't available in C++14). Tested powerpc64le-linux, committed to trunk. Rainer, this is another place where alignof(max_align_t) gets encoded into the ABI, so is affected by PR 77691 as well.