losemymind 2015-09-08 09:27 采纳率: 33.3%
浏览 1932

jemalloc在单线程上的效率问题

在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
  • 写回答

1条回答 默认 最新

  • devmiao 2015-09-08 11:57
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 RPA正常跑,cmd输入cookies跑不出来
  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。