Tag: visual c ++

如何提高Visual C ++编译时间?

我在buildbot中编译2个C ++项目,每次提交。 两者都是大约1000个文件,一个是100kloc,另一个是170kloc。 编译时间与gcc(4.4)到Visual C ++(2008)非常不同。 一个项目的Visual C ++编译在20分钟内完成。 他们不能利用多核心,因为一个项目依赖于另一个。 最后,debugging和发布中的32位和64位两个项目的完整编译需要超过2个半小时。 一个项目的gcc编译在4分钟内完成。 它可以在4个核心上并行,大约需要1分10秒。 两个项目的4个版本(debugging/发布,32/64位)的所有8个版本都在不到10分钟的时间内编译完成。 Visual C ++编译时间发生了什么? 他们基本上慢了5倍。 预计编译C ++ kloc的平均时间是多less? 我的vc ++为7s / kloc,gcc为1.4s / kloc。 可以做任何事情来加快Visual C ++编译时间?

如何在Visual Studio项目中定义相对path?

我有一个库和一个使用库的控制台应用程序。 该库有一个包含源文件和头文件的文件夹。 我的项目是在一个孩子/内部目录,但我想包括的库目录是在父/上层目录。 我的项目目录: H:\Gmail_04\gsasl-1.0\lib\libgsaslMain 包括文件在这里: H:\Gmail_04\gsasl-1.0\src 如何使用相对于项目目录的path来包含父/上目录中的文件夹?

为什么是std :: vector :: operator 比std :: vector :: at()快5到10倍?

在程序优化期间,试图优化循环遍历一个向量,我发现以下事实::: std :: vector :: at()比operator []要慢得多! 在释放和debugging版本(VS2008 x86)中,运算符[]比()的速度快5到10倍 。 在网上阅读让我意识到在()有边界检查。 好的,但是,放慢操作达10倍?! 这有什么理由吗? 我的意思是,边界检查是一个简单的数字比较,还是我错过了什么? 问题是这个性能打击的真正原因是什么? 还有, 有什么办法可以让它更快 ? 我当然会在其他代码部分(我已经有自定义的边界检查!)与[]调用我所有的()调用。 概念validation: #define _WIN32_WINNT 0x0400 #define WIN32_LEAN_AND_MEAN #include <windows.h> #include <conio.h> #include <vector> #define ELEMENTS_IN_VECTOR 1000000 int main() { __int64 freq, start, end, diff_Result; if(!::QueryPerformanceFrequency((LARGE_INTEGER*)&freq)) throw "Not supported!"; freq /= 1000000; // microseconds! ::std::vector<int> vec; vec.reserve(ELEMENTS_IN_VECTOR); for(int […]

用msvc 14.1(VS2017 RC)build立提升

我正在尝试用最新的msvc 14.1和VS2017 RC来提升1.63。 所以我做了我通常所做的一切,打开了Development Cmd,然后运行bootstrap.bat并运行命令 b2 -link=static -threading=multi 出于某种原因,我得到了这些错误: E:/Coding/SDKs/boost_1_63_0/tools/build/src/tools\msvc.jam:834: in generate-setup-cmd *** argument error * rule maybe-rewrite-setup ( toolset : setup-script : setup-options : version : rewrite-setup ? ) * called with: ( msvc : : : default : ) * missing argument setup-script E:/Coding/SDKs/boost_1_63_0/tools/build/src/tools\msvc.jam:746:see definition of rule 'maybe-rewrite-setup' being called E:/Coding/SDKs/boost_1_63_0/tools/build/src/tools\msvc.jam:1076: in configure-really […]

信号NaN的有用性?

我最近在IEEE 754和x87架构上读了很多。 我正在考虑在我正在使用的一些数字计算代码中使用NaN作为“缺失值”,并且我希望使用NaN 信号发送将允许我在不希望出现的情况下捕获浮点exception着手“缺失的价值”。 相反,我会用安静的 NaN让“缺失值”通过计算传播。 然而,信号NaN不能正常工作,因为我认为它们是基于存在于其上的非常有限的文档。 这里是我所知道的一个总结(所有这些使用x87和VC ++): _EM_INVALID(IEEE“无效”exception)在遇到NaN时控制x87的行为 如果_EM_INVALID被屏蔽(exception被禁用),则不会产生exception,操作可以返回安静的NaN。 涉及NaN信号的操作不会引发exception,但会被转换为安静的NaN。 如果_EM_INVALID未被屏蔽(例外启用),一个无效的操作(例如,sqrt(-1))会导致一个无效的exception被抛出。 x87 永远不会产生信号NaN。 如果_EM_INVALID未被屏蔽, 任何使用信号NaN(甚至用它初始化一个variables)都会导致一个无效的exception被抛出。 标准库提供了一种访问NaN值的方法: std::numeric_limits<double>::signaling_NaN(); 和 std::numeric_limits<double>::quiet_NaN(); 问题是我看不到任何信号NaN。 如果_EM_INVALID被屏蔽,则其行为与安静的NaN完全相同。 由于没有NaN与任何其他NaN相比,没有逻辑差异。 如果_EM_INVALID 没有被屏蔽(exception被启用),那么甚至不能用信号发送一个variablesNaN: double dVal = std::numeric_limits<double>::signaling_NaN(); 因为这会引发一个exception(信号NaN值被加载到一个x87寄存器中以将其存储到存储器地址中)。 你可能会像我这样想: 掩码_EM_INVALID。 用信号NaN初始化variables。 Unmask_EM_INVALID。 但是,步骤2会导致信号NaN转换为安静的NaN,所以后续使用它不会引发exception! 那么WTF? 信号NaN有没有用处或目的? 我明白其中一个原意是用它初始化内存,以便可以捕获到单位浮点值的使用。 有人可以告诉我,如果我在这里失去了一些东西? 编辑: 为了进一步说明我希望做的事情,下面是一个例子: 考虑对数据向量执行math运算(双精度)。 对于某些操作,我想允许向量包含一个“缺失值”(假设这对应于一个电子表格列,例如,其中一些单元格没有值,但它们的存在是显着的)。 对于某些操作,我不想让vector包含“缺失值”。 也许我想采取一个不同的行动方式,如果一个“缺失的价值”是存在的设置 – 也许执行一个不同的操作(因此这不是一个无效的状态)。 这个原始代码看起来像这样: const double MISSING_VALUE = 1.3579246e123; using […]

“VC ++”和“C ++”有什么区别?

有人问我对VC ++有多熟悉,对C ++有多熟悉。 有什么不同?

如何增加一个迭代器2?

任何人都可以告诉我如何增加迭代器2? iter++可用 – 我必须做iter+2吗? 我怎样才能做到这一点?

在C ++预处理器中,R和L有什么特别之处?

我通过Visual Studio 2013预处理器运行以下代码。 输出令我惊讶。 hello.cpp的内容: #define A(j) #j A(A?) A(B?) A(C?) A(D?) A(E?) A(F?) A(G?) A(H?) A(I?) A(J?) A(K?) A(L?) A(M?) A(N?) A(O?) A(P?) A(Q?) A(R?) A(S?) A(T?) A(U?) A(V?) A(W?) A(X?) A(Y?) A(Z?) 命令: cl /P hello.cpp hello.i包含: #line 1 "hello.cpp" "A?" "B?" "C?" "D?" "E?" "F?" "G?" "H?" "I?" "J?" "K?" "L" "M?" […]

Lambda的显式返回types

当我尝试编译这个代码(VS2010)时,我得到以下错误: error C3499: a lambda that has been specified to have a void return type cannot return a value void DataFile::removeComments() { string::const_iterator start, end; boost::regex expression("^\\s?#"); boost::match_results<std::string::const_iterator> what; boost::match_flag_type flags = boost::match_default; // Look for lines that either start with a hash (#) // or have nothing but white-space preceeding the hash symbol remove_if(rawLines.begin(), […]

常量variables不起作用

如果我在我的标题中定义我的常量variables像这样… extern const double PI = 3.1415926535; extern const double PI_under_180 = 180.0f / PI; extern const double PI_over_180 = PI/180.0f; 我得到以下错误 1>MyDirectX.obj : error LNK2005: "double const PI" (?PI@@3NB) already defined in main.obj 1>MyDirectX.obj : error LNK2005: "double const PI_under_180" (?PI_under_180@@3NB) already defined in main.obj 1>MyDirectX.obj : error LNK2005: "double const PI_over_180" (?PI_over_180@@3NB) already […]