在我的性能测试中,我发现苹果在iPhone3.0上提供的SQLite版本比我自己编译的合并SQLite版本快得多。所以我的问题是,有没有办法找出苹果使用了哪些编译选项?是否有一个测试应用程序可以打印出所有默认的set pragams和sqlite3_config设置?
mwecs4sa1#
您可以使用compile_options杂注(或链接文档中提到的相关函数)查看构建SQLite时使用的编译时选项。但是,这个杂注(以及相关函数)的可用性似乎取决于它是否在编译时启用。SQLite文档说:通过在编译时指定SQLITE_OMIT_COMPILEOPTION_DIAGS选项,可以省略对诊断函数sqlite3_compileoption_used()和sqlite3_compileoption_get()的支持。因此,很可能您的发行版在编译时没有启用此功能,这意味着您可能无法查看选项。
xe55xuns2#
除了尝试所有可能的排列并测试每一种排列以查看哪些行为相同之外,没有办法询问libsqlite的确切配置(除非Apple进行了自定义修改)。最好的方法是调用sqlite3_libversion,它返回sqlite的版本号。
sqlite3_libversion
jv2fixgn3#
看起来pragma设置中唯一的不同是该高速缓存_size,默认值是2000,但在iPhone上是500。在某些系统上,可以通过以下方式读取编译器设置:objdump --full-contents --section .GCC.command.line
nhaq1z214#
从命令行:
# echo "PRAGMA compile_options;" | sqlite3 COMPILER=gcc-10.2.0 ENABLE_COLUMN_METADATA ENABLE_DBPAGE_VTAB ENABLE_DBSTAT_VTAB ENABLE_FTS3_PARENTHESIS ENABLE_FTS4 ENABLE_FTS5 ENABLE_GEOPOLY ENABLE_JSON1 ENABLE_PREUPDATE_HOOK ENABLE_RTREE ENABLE_SESSION ENABLE_STAT4 ENABLE_UNLOCK_NOTIFY ENABLE_UPDATE_DELETE_LIMIT OMIT_LOOKASIDE SECURE_DELETE SOUNDEX TEMP_STORE=1 THREADSAFE=1 USE_ALLOCA USE_FCNTL_TRACE
4条答案
按热度按时间mwecs4sa1#
您可以使用compile_options杂注(或链接文档中提到的相关函数)查看构建SQLite时使用的编译时选项。但是,这个杂注(以及相关函数)的可用性似乎取决于它是否在编译时启用。SQLite文档说:
通过在编译时指定SQLITE_OMIT_COMPILEOPTION_DIAGS选项,可以省略对诊断函数sqlite3_compileoption_used()和sqlite3_compileoption_get()的支持。
因此,很可能您的发行版在编译时没有启用此功能,这意味着您可能无法查看选项。
xe55xuns2#
除了尝试所有可能的排列并测试每一种排列以查看哪些行为相同之外,没有办法询问libsqlite的确切配置(除非Apple进行了自定义修改)。最好的方法是调用
sqlite3_libversion
,它返回sqlite的版本号。jv2fixgn3#
看起来pragma设置中唯一的不同是该高速缓存_size,默认值是2000,但在iPhone上是500。
在某些系统上,可以通过以下方式读取编译器设置:objdump --full-contents --section .GCC.command.line
nhaq1z214#
从命令行: