As in C ++ 11 (which has the concept of data race), the standard ensures that new/delete , calloc/malloc/realloc/free will happen in one complete order.
From n3690 18.6.1.4:
In order to determine the existence of a data race, the version of the operator library new, the user-defined version of the global operator new, the standard library functions C calloc and malloc, the library versions of the operator deletion, the versions of the user replacements to delete the operator, the function of the standard library C and the standard library function C must enter data races (17.6.5.9). Calls to these functions that allocate or free a specific storage unit must be made in the same general order, and each such release call must occur before (1.10) the next distribution (if any) in that order.
I could not find such guarantees in previous versions of the standard, but (as others said). I believe that most implementations provide multi-threaded support for memory allocation.
source share