Начиная с C ++ 11 (который имеет концепцию гонки данных), стандарт гарантирует, что new/delete
, calloc/malloc/realloc/free
будет происходить в едином общем порядке.
Начиная с n3690 18.6.1.4:
В целях определения существования гонок данных, библиотечных версий оператора new, пользовательских заменяющих версий глобального оператора new, стандартных библиотечных функций C calloc и malloc, библиотечных версий оператора delete,заменяемые пользователем версии оператора delete, функции стандартной библиотеки C free и функции realloc стандартной библиотеки C не должны вводить гонку данных (17.6.5.9).Вызовы этих функций, которые выделяют или освобождают определенную единицу хранения, должны происходить в едином общем порядке, и каждый такой вызов освобождения должен происходить до (1.10) следующего выделения (если есть) в этом порядке.
Я не смог найти таких гарантий в предыдущих версиях стандарта, но (как уже говорили другие), я полагаю, что большинство реализаций обеспечивают многопоточную поддержку выделения памяти.