Implementation-defined, but it's exactly the same as malloc, which also doesn't promise unfaulted pages. This is one reason some of us keep saying that OpenMP sucks. It's a shitty standard that obstructs better standards from being created.
On March 12, 2017 11:19:49 AM MDT, Jeff Hammond <[email protected]> wrote: >On Sat, Mar 11, 2017 at 9:00 AM Jed Brown <[email protected]> wrote: > >> Jeff Hammond <[email protected]> writes: >> > I agree 100% that multithreaded codes that fault pages from the >main >> thread in a NUMA environment are doing something wrong ;-) >> > >> > Does calloc *guarantee* pages are not mapped? If I calloc(8), do I >get >> the zero page or part of the arena that's already mapped that is >zeroed by >> the heap manager? >> >> Is your argument that calloc() should never be used in multi-threaded >code? >> > >I never use it for code that I want to behave well in a NUMA >environment. > > >> If the allocation is larger than MMAP_THRESHOLD (128 KiB by default >for >> glibc) then it calls mmap. This obviously leaves an intermediate >size >> that could be poorly mapped (assuming 4 KiB pages), but it's also so >> small that it easily fits in cache. > > >Is this behavior standardized or merely implementation-defined? I'm not >interested in writing code that assumes Linux/glibc. > >Jeff > >> >> -- >Jeff Hammond >[email protected] >http://jeffhammond.github.io/
