Herb Sutter’s GotW89 Smart Pointers post includes good reasons to use make_shared/make_unique instead of naked new. Avoiding memory fragmentation is one of those:
Separate allocation
auto sp1 = shared_ptr<Widget>{ new widget{} }; auto sp2 = sp1;
Single allocation
If you use make_shared to allocate the object and the shared_ptr all in one go, then the implementation can fold them together in a single allocation.
auto sp1 = make_shared<Widget>(); auto sp2 = sp1;