在android系统的单线程环境下,使用jemalloc比比使用慢很多,下面是测试代码
int pointerCount = 1000000;
std::vector<char*> pointers(pointerCount);
LOG_TRACE("============ begin new ==============");
std::chrono::time_point<std::chrono::system_clock> start, end;
start = std::chrono::system_clock::now();
for(int i = 0; i < pointerCount; i++)
{
char* psz = new char[64];
pointers.push_back(psz);
}
for(auto p : pointers)
{
delete[] p;
}
end = std::chrono::system_clock::now();
std::chrono::duration<double> elapsed_seconds = end-start;
LOG_TRACE("================= elapsed_seconds: %fs", elapsed_seconds.count());
LOG_TRACE("============ end new ==============");
使用jemalloc所需的时间大概为1.1s,不使用的话大概是0.4s
下面是编译的脚本,最终生成armeabi,armeabi-v7a, x86
三个架构的.a和.so文件,是不是有什么设置设置错误了?
#! /bin/sh
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
host_os=`uname -s | tr "[:upper:]" "[:lower:]"`
build_os=`uname -m`
SRCDIR=$DIR/src
if [ ! -f "$DIR/configure" ]; then
for i in autoconf; do
echo "$i"
$i
if [ $? -ne 0 ]; then
echo "Error $? in $i"
exit 1
fi
done
fi
BASE_CONFIG=""
ARM_COMPILE_VERSION=4.8
X86_COMPILE_VERSION=4.8
NDK_HOST=darwin-x86
NDK=$NDK_ROOT
NDKABI=8
NDKVER=$NDK/toolchains/arm-linux-androideabi-$ARM_COMPILE_VERSION
NDKP=$NDKVER/prebuilt/$NDK_HOST/bin/arm-linux-androideabi-
NDKF="--sysroot $NDK/platforms/android-$NDKABI/arch-arm"
# Android/ARM, armeabi (ARMv5TE soft-float), Android 2.2+ (Froyo)
DESTDIR=$DIR/prebuilt/android/armeabi
export PATH=$PATH:$NDKVER/prebuilt/$NDK_HOST/bin
export CFLAGS="$NDKF"
export LDFLAGS="$NDKF"
export CPPFLAGS="$NDKF"
export LIBS="-llog"
./configure --build=$build_os --host=arm-linux-androideabi --target=arm-linux-androideabi --prefix=$DESTDIR $BASE_CONFIG
if [ $? -ne 0 ]; then
echo "Error $? in ./configure"
exit 1
fi
make clean
make -j8 HOST_CC="gcc -m32" CROSS=$NDKP TARGET_SYS=Linux TARGET_FLAGS="$NDKF"
make install
#exit 0
# Android/ARM, armeabi-v7a (ARMv7 VFP), Android 4.0+ (ICS)
DESTDIR=$DIR/prebuilt/android/armeabi-v7a
NDKARCH="-march=armv7-a -mfloat-abi=softfp -Wl,--fix-cortex-a8"
export CFLAGS="$NDKF $NDKARCH"
export LDFLAGS="$NDKF $NDKARCH"
export CPPFLAGS="$NDKF $NDKARCH"
./configure --build=$build_os --host=arm-linux-androideabi --target=arm-linux-androideabi --prefix=$DESTDIR $BASE_CONFIG
if [ $? -ne 0 ]; then
echo "Error $? in ./configure"
exit 1
fi
make clean
make -j8 HOST_CC="gcc -m32" CROSS=$NDKP TARGET_SYS=Linux TARGET_FLAGS="$NDKF $NDKARCH"
make install
# Android/x86, x86 (i686 SSE3), Android 4.0+ (ICS)
NDKABI=14
NDKVER=$NDK/toolchains/x86-$X86_COMPILE_VERSION
NDKP=$NDKVER/prebuilt/$NDK_HOST/bin/i686-linux-android-
NDKF="--sysroot $NDK/platforms/android-$NDKABI/arch-x86"
DESTDIR=$DIR/prebuilt/android/x86
export PATH=$PATH:$NDKVER/prebuilt/$NDK_HOST/bin
export CFLAGS="$NDKF"
export LDFLAGS="$NDKF"
export CPPFLAGS="$NDKF"
./configure --build=$build_os --host=i686-linux-android --target=i686-linux-android --prefix=$DESTDIR $BASE_CONFIG
if [ $? -ne 0 ]; then
echo "Error $? in ./configure"
exit 1
fi
make clean
make -j8 HOST_CC="gcc -m32" CROSS=$NDKP TARGET_SYS=Linux TARGET_FLAGS="$NDKF"
make install