我正在开发一个具有大量编译时计算的C++项目.漫长的编译时间正在减慢我们的速度.我怎样才能找到模板元程序中最慢的部分,以便我可以优化它们?(当我们有慢运行时计算时,我有很多分析器可供选择,例如valgrind的callgrind工具.所以我尝试构建一个调试GCC并分析它编译我们的代码,但我没有从中学到太多东西.)
我使用GCC和Clang,但欢迎任何建议.
我profile_templates在Boost的网站上找到了,但似乎记录很少,需要jam/bjam构建系统.如果您展示如何在非卡纸项目1上使用它,我会向您投票.https://svn.boost.org/svn/boost/sandbox/tools/profile_templates/似乎计算实例数,而计算所花费的时间将是理想的.
1 我们的项目使用CMake并且足够小,只需将模板分析用于模板分析就可以接受.
鉴于:
#include <functional>
class world_building_gun;
class tile_bounding_box;
typedef std::function<void (world_building_gun, tile_bounding_box)> worldgen_function_t;
void foo() {
worldgen_function_t v;
worldgen_function_t w(v);
}
Run Code Online (Sandbox Code Playgroud)
这会编译吗?我的编译器说:
是的:GCC/stdlibc ++(在GCC和Clang中也是boost :: function都是)
No:Clang/libc ++(http://libcxx.llvm.org/,Clang 3.0,libc ++ SVN截至今日)
(如果"no"是正确答案,我将修复我的真实代码,将完整类型放入更多标题或使用boost :: function.)
编辑:这是Clang错误消息:
In file included from foo.cpp:2:
In file included from /usr/include/c++/v1/functional:462:
/usr/include/c++/v1/type_traits:2766:19: error: invalid appli
static_assert(sizeof(_Tp) > 0, "Type must be complete.");
^~~~~~~~~~~
/usr/include/c++/v1/type_traits:2752:15: note: in instantiation of template class 'std::__1::__check_complete<world_buildin
: private __check_complete<_Hp>,
^
/usr/include/c++/v1/type_traits:2753:15: note: in instantiation of template class 'std::__1::__check_complete<world_buildin
private __check_complete<_T0, _Tp...> …Run Code Online (Sandbox Code Playgroud) 我在网上找到的C和POSIX引用没有指定C99的fesetround()的线程安全性.甚至GNU文档也没有[1].状态是每线程还是每个进程?
[1] https://www.gnu.org/software/hello/manual/libc.html#Rounding
我正在尝试通过 SSL 远程连接到 mysql 数据库,并验证服务器的证书以匹配用于连接到服务器的 DNS 域。
使用命令行mysql工具,我可以使用mysql --ssl-ca=/path/to/cacert.pem --ssl-verify-server-cert.
使用 rails mysql2,我设置了sslca:¹,这会导致未完全验证的 SSL 连接像mysql --ssl-ca=这样。--ssl-verify-server-cert如果服务器证书的域错误,我该怎么做才能使连接失败?
我尝试添加这对这个问题没有影响如下:flags: SSL_VERIFY_SERVER_CERT,flags: CLIENT_SSL_VERIFY_SERVER_CERT,flags: 1073741824,和secure_auth: true。
¹要么sslca: /path/to/cacert.pem在配置/ database.yml中,或?sslca=/path/to/cacert.pem在一个mysql2://URL