shines77 / jemalloc-win32

jemalloc — general purpose memory allocation functions, can be compiled on the windows.
MIT License
45 stars 16 forks source link

jemalloc的autoconf #1

Closed hominlinx closed 8 years ago

hominlinx commented 11 years ago

请问你的jemalloc_defs.h是如何生成的啊?

shines77 commented 11 years ago

首先很抱歉, 现在才看到你的email, 由于这个email账号很少开, 所以回答有点晚, 希望对你有所帮助.

你来的两封email我都收到了, 下面回答一下你的两个问题, 由于这个项目我也很久没碰了, 不正确之处, 请多包涵.

1、 您的初始代码(firstsubmit)是如何将那些.h.in转换为.h的,我看了一下,这里面涉及到系统是64位还是32位。

我记得是用windows下的cgywin环境或者MinGW环境, 执行源代码根目录下的autogen.sh或者configure, 这时会根据你的机器和系统, 会设置和生成那些.h文件, 即从.h.in文件里构建, 然后执行make, 我记得当时有很多错误, 我最终也没有编译通过, 但是我就利用这些设置生成的文件, 构建VS2008里可以使用的版本, 并适当做了一些修改, 让其可以在VS2008环境下可以编译, 具体修改了哪些地方我也不太记得了.

我做这个项目主要想测试和比较一下jemalloc, tcmalloc, APR, 默认malloc的效率, 用我这个版本编译出来的jemalloc在windows下好像效率有些问题, 不知道是不是我设置不对, 还是jemalloc本身有问题, 当然, 为了能在VS2008上编译, 我加了不少代码, 可能也有一定关系, 总之, 如果能在cgywin或MinGW环境下编译, 最好是在类Linux的环境编译, 官方代码并不具备Visual Studio下的完全支持和编译.

关于指定为64位或32位, 是可以通过configure后面带参数设置的, 一般使用-m32 CPPFLAGS=-m32 CFLAGS=-m32 等指定为32位, 具体你可以google一下"configure 32bit"等.

2、 我在编译的Test工程的时候出错。我现在是编译的初始代码:

1>------ Build started: Project: jemalloc_test, Configuration: Debug Win32 ------

1>Compiling...

1>jemalloc_main.c

1>e:\opensource\jemalloc\jemalloc-win32\include\jemalloc\jemalloc.h(8) : fatal error C1083: Cannot open include file: 'strings.h': No such file or directory

1>Build log was saved at "file://E:\opensource\jemalloc\jemalloc-win32\tmp\windows\x86\vc2008\Debug\jemalloc_test\BuildLog.htm"

1>jemalloc_test - 1 error(s), 0 warning(s)

========== Build: 0 succeeded, 1 failed, 1 up-to-date, 0 skipped ==========

错误说明是没有stings.h,您是如何编译通过的??

我看了一下, 的确, 好像我的系统因为装了别的一些库, 带有这个头文件, 你也可以把这句注释掉试试, 或者使用这个:

/* strings.h

Copyright 2007 Red Hat, Inc.

This file is part of Cygwin.

This software is a copyrighted work licensed under the terms of the Cygwin license. Please consult the file "CYGWIN_LICENSE" for details. */

ifndef _STRINGSH

define _STRINGSH

/* newlib's string.h already declares these functions. */

ifndef _STRINGH

include "_ansi.h"

define __need_size_t

include

_BEGIN_STD_C

int _EXFUN(bcmp,(const void , const void , size_t)); void _EXFUN(bcopy,(const void , void , size_t)); void _EXFUN(bzero,(void , size_t)); int _EXFUN(ffs,(int)); char _EXFUN(index,(const char , int)); char _EXFUN(rindex,(const char , int)); int _EXFUN(strcasecmp,(const char , const char )); int _EXFUN(strncasecmp,(const char , const char *, size_t));

_END_STD_C

endif /* _STRINGH */

endif /* _STRINGSH */

3、还有一个问题, 我发现使用vld的#include 语句没有注释掉, vld是一个VS环境下检测内存泄露的工具, 如果你没有安装, 可以把这句注释掉, 一般它只到每个项目的入口函数所在的文件的第一条语句.

4、我email告诉你QQ, 不过最近上得也不多, 不过偶尔还是会上上.