[new.delete.dataraces]

# 17 Language support library [[support]](./#support)

## 17.6 Dynamic memory management [[support.dynamic]](support.dynamic#new.delete.dataraces)

### 17.6.3 Storage allocation and deallocation [[new.delete]](new.delete#dataraces)

#### 17.6.3.5 Data races [new.delete.dataraces]

[1](#1)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L3000)

For purposes of determining the existence of data races, the library versions
of operator new, user replacement versions of global operator new,
the C standard library functionsaligned_alloc, calloc, and malloc,
the library
versions of operator delete, user replacement
versions of operator delete, the C standard library functionfree, and the C standard library function realloc shall not
introduce a data race ([[res.on.data.races]](res.on.data.races "16.4.6.10 Data race avoidance"))[.](#1.sentence-1)

Calls to these functions that allocate or deallocate a particular unit
of storage shall occur in a single total order, and each such deallocation call
shall [happen before](intro.multithread#def:happens_before "6.10.2 Multi-threaded executions and data races [intro.multithread]") the next allocation (if any) in this order[.](#1.sentence-2)
