Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

scons: Tell the compiler to avoid internal malloc when using tcmalloc

According to the tcmalloc readme, the recommended way of compiling
applications that make use of tcmalloc is to disable some
optimizations in gcc that make assumptions about malloc et al. This
changeset adds the necessary compiler flags for both gcc and
clang.

From the tcmalloc readme:
"NOTE: When compiling with programs with gcc, that you plan to link
with libtcmalloc, it's safest to pass in the flags

 -fno-builtin-malloc -fno-builtin-calloc
 -fno-builtin-realloc -fno-builtin-free

when compiling."
  • Loading branch information...
commit 311f63df8bab57cb12fc6f89f2d4be9a31bf943d 1 parent b33342c
@andysan authored
Showing with 14 additions and 1 deletion.
  1. +14 −1 SConstruct
View
15 SConstruct
@@ -505,6 +505,12 @@ Export('MakeAction')
main['LTO_CCFLAGS'] = []
main['LTO_LDFLAGS'] = []
+# The tcmalloc works best if the compiler doesn't assume that we're
+# using the builtin malloc and friends. These flags are
+# compiler-specific, so we need to set them after we detect which
+# compiler we're using.
+main['TCMALLOC_CCFLAGS'] = []
+
CXX_version = readCommand([main['CXX'],'--version'], exception=False)
CXX_V = readCommand([main['CXX'],'-V'], exception=False)
@@ -581,6 +587,9 @@ if main['GCC']:
main['LTO_LDFLAGS'] = ['-flto=%d' % GetOption('num_jobs'),
'-fuse-linker-plugin']
+ main.Append(TCMALLOC_CCFLAGS=['-fno-builtin-malloc', '-fno-builtin-calloc',
+ '-fno-builtin-realloc', '-fno-builtin-free'])
+
elif main['CLANG']:
# Check for a supported version of clang, >= 2.9 is needed to
# support similar features as gcc 4.4. See
@@ -607,6 +616,8 @@ elif main['CLANG']:
'-Wno-parentheses',
'-Wno-self-assign'])
+ main.Append(TCMALLOC_CCFLAGS=['-fno-builtin'])
+
# On Mac OS X/Darwin we need to also use libc++ (part of XCode) as
# opposed to libstdc++ to make the transition from TR1 to
# C++11. See http://libcxx.llvm.org. However, clang has chosen a
@@ -911,7 +922,9 @@ have_posix_clock = \
conf.CheckLibWithHeader('rt', 'time.h', 'C',
'clock_nanosleep(0,0,NULL,NULL);')
-if not conf.CheckLib('tcmalloc_minimal'):
+if conf.CheckLib('tcmalloc_minimal'):
+ main.Append(CCFLAGS=main['TCMALLOC_CCFLAGS'])
+else:
print termcap.Yellow + termcap.Bold + \
"You can get a 12% performance improvement by installing tcmalloc "\
"(libgoogle-perftools-dev package on Ubuntu or RedHat)." + \

0 comments on commit 311f63d

Please sign in to comment.
Something went wrong with that request. Please try again.