Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 28 Mar 2013 00:04:22 -0700
From:      Jeremy Chadwick <jdc@koitsu.org>
To:        Unga <unga888@yahoo.com>
Cc:        "freebsd-stable@FreeBSD.org" <freebsd-stable@FreeBSD.org>
Subject:   Re: FreeBSD 9.1 excessive memory allocations [SOLVED]
Message-ID:  <20130328070422.GA26584@icarus.home.lan>
In-Reply-To: <1364449156.30979.YahooMailNeo@web161906.mail.bf1.yahoo.com>
References:  <1364322902.78474.YahooMailNeo@web161904.mail.bf1.yahoo.com> <1364393170.36972.49.camel@revolution.hippie.lan> <1364409226.37379.YahooMailNeo@web161906.mail.bf1.yahoo.com> <1364410923.36972.67.camel@revolution.hippie.lan> <1364449156.30979.YahooMailNeo@web161906.mail.bf1.yahoo.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, Mar 27, 2013 at 10:39:16PM -0700, Unga wrote:
> > I think you may be reading too much into the malloc manpage.? When it
> > mentions the use of per-thread small-object caches to avoid locking it's
> > talking about performance, not thread safety.? Allocations of all sizes
> > are thread-safe, the library just assumes that huge allocations are rare
> > enough that it doesn't use extra per-thread resources to avoid locking
> > for them, it just uses locking for huge blocks.
> > 
> > -- Ian
> 
> Good to note all allocations are thread safe in FreeBSD. Is it by some
> standard that malloc should be thread safe regardless the OS (BSDs,
> Linux, Windows, Android, etc)?

The Internet is sometimes a useful resource.

http://stackoverflow.com/questions/855763/malloc-thread-safe
http://stackoverflow.com/questions/987444/about-thread-safety-in-malloc-and-free
http://msdn.microsoft.com/en-us/library/ms235505.aspx
http://msdn.microsoft.com/en-us/library/abx4dbyh.aspx

On the BSDs, with gcc -pthread you should be fine.  Don't ask me about
Clang/LLVM.

On Linux, glibc's routines are apparently thread-safe barring if the
software was built with -DNO_THREADS (which seems very unlikely given
the risks).  Android is Linux.

On Windows, assuming you're using CRT libraries, the routines are
thread-safe.  I get the impression the threaded library versions are
also thread-safe for their *alloc equivalents.  I believe HeapAlloc is
thread-safe, and am pretty sure Global* is thread-safe (barring very
very old Wine environments).

Solaris's routines are also thread-safe, barring you're using standard
malloc and not mtmalloc or ptmalloc or libumem (try searching the web
for things like "Solaris mtmalloc" and read).

All these OSes in some way or another have support for multi-threaded
malloc implementations for increased performance (this is separate from
locking/lock contention) where, AFAIK, you get to do the locking
yourself.

-- 
| Jeremy Chadwick                                   jdc@koitsu.org |
| UNIX Systems Administrator                http://jdc.koitsu.org/ |
| Mountain View, CA, US                                            |
| Making life hard for others since 1977.             PGP 4BD6C0CB |



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20130328070422.GA26584>