由于VC++ 2010在64位代码中不支持内联汇编,因此如何在代码中获取pausex86-64指令?像有许多其他常见的汇编指令(例如,似乎没有成为一个内在此__rdtsc(),__cpuid()等...).
在为什么一面,我希望在指令帮助忙等待的使用情况,从而使(超线程)的CPU可用来上运行的其他线程CPU说(见:成效分析在intel.com).该pause指令对于此用例以及自旋锁实现非常有用,我无法理解为什么MS不将其作为内在包含.
谢谢
我已经下载了最新的OpenSSL源代码包.我想用VC++ 2010 x64构建它.按照说明似乎不起作用.配置步骤看起来很好,但随后:
C:\ 1> MS\do_win64a.bat
C:\ 1> perl util\mkfiles.pl 1> MINFO
C:\ 1> perl ms\uplink.pl win64a 1> ms\uptable.asm
C:\ 1> ml64 -c -Foms\uptable.obj ms\uptable.asm Microsoft(R)宏汇编程序(x64)版本10.00.30319.01版权所有(C)Microsoft Corporation.版权所有.
组装:ms\uptable.asm
C:\ 1> perl util\mk1mf.pl no-asm VC-WIN64A 1> ms \nt.mak在util\mk1mf.pl第907行没有关于crypto\md4的规则.
C:\ 1> perl util\mk1mf.pl dll no-asm VC-WIN64A 1> ms \ntdll.mak在util\mk1mf.pl第907行没有关于crypto\md4的规则.
C:\ 1> perl util\mkdef.pl 32 libeay 1> ms\libeay32.def
C:\ 1> perl util\mkdef.pl 32 ssleay 1> ms\ssleay32.def
Win 32(do_ms)输出看起来有点不同,但"在util\mk1mf.pl第907行没有加密\ md4的规则"仍然存在.
任何人都可以帮助我构建库或共享vc2010构建的二进制文件吗?或者是库的VS2010项目文件?
我有一个基类A和派生类B.
B类是从A公开的
如果A是类a是成员变量,我想访问成员变量的地址
当我使用受保护和公共访问说明符时,我正在观察不同的行为.
在这种情况下,当A类成员a 受到保护时,我得到:
cout<<&A::a << endl; 给我一个编译器错误..
但是cout<<&(A::a)<<endl;有效并给我正确的结果.
在这种情况下,当A级成员a 公开时,我得到:
为什么会这样?
这是完整的代码:
#include <iostream>
using namespace std;
class A
{
protected:
int a;
void fun()
{
cout<<"A's fun"<<endl;
}
public:
A(int Aarg):a(Aarg)
{
cout << "A's construction done" <<endl;
}
};
class B: public A
{
protected:
int b;
public:
void fun()
{
cout << "B's fun"<<endl;
}
B(int As, int Bs):A(As), b(Bs)
{
std::cout<<"B's Construction Done" <<std::endl;
}
void show() …Run Code Online (Sandbox Code Playgroud) 考虑以下课程:
class Foo
{
enum Flags {Bar, Baz, Bax};
template<Flags, class = void> struct Internal;
template<class unused> struct Internal<Bar, unused> {/* ... */};
template<class unused> struct Internal<Baz, unused> {/* ... */};
template<class unused> struct Internal<Bax, unused> {/* ... */};
};
Run Code Online (Sandbox Code Playgroud)
在VC++ 2010和Comeau C++上测试时,上面的类概述按预期编译和运行.但是,当Foo将其作为模板本身时,上述代码段在VC++ 2010下会中断.
例如,以下代码段:
template<class> class Foo
{
// Same contents as the original non-templated Foo.
};
Run Code Online (Sandbox Code Playgroud)
产生以下错误类:
C2754: 'Foo<<unnamed-symbol>>::Internal<Bar,unused>' : a partial specialization cannot have a dependent non-type template parameter
C2754: 'Foo<<unnamed-symbol>>::Internal<Baz,unused>' : a …Run Code Online (Sandbox Code Playgroud) VC++ 2010中的C++ 0x模式是否有关闭开关?我正在开发一个应该在非0x编译器上编译的项目,因此我想针对当前标准进行编译.(即使没有直接使用新功能,仍然存在微妙之处,使得C++ 0x更加谨慎).
我找到的最接近的开关是,Configuration Properties -> C/C++ -> Language -> Disable Language Extensions但不是这样.
c++ visual-studio-2010 compiler-options visual-c++-2010 c++11
使用VS2010构建,我正在构建一个导致许多链接错误的库:
error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2'
Run Code Online (Sandbox Code Playgroud)
导致我必须同时发布我的lib的发行版和调试版.我没有理由发布lib的调试版本,它只是膨胀二进制发行版.但是内置调试的客户端代码拒绝链接我的发布库.
我之前看到过这个问题,但他们似乎并未提出正确的问题.我理解这个错误是什么,为什么我得到它(好吧,有点;我不确定是什么发出依赖.你呢?),但我想知道的是如何消除这种依赖性的发生在我的lib?
类似于在使用冲突的CRT时抱怨的libs,可以使用/ Zl(从目标文件中省略默认库名)来防止,当然有一种方法可以防止这种依赖性也被发送到我的libs中吗?
我只想生成一个优化的lib,它能够链接到调试或发布代码.客户端代码调试lib并不重要.几乎没有第三方库提供不同的调试和发布版本.供应商如何避免这个问题呢?
有没有人知道究竟是什么原因导致这种链接依赖,以及如何完全禁用它,或将其从我的代码中分解出来?
我有以下代码,并期望使用函数的内在版本exp().不幸的是,它不是在x64版本中,使其比类似的Win32(即32位版本)慢:
#include "stdafx.h"
#include <cmath>
#include <intrin.h>
#include <iostream>
int main()
{
const int NUM_ITERATIONS=10000000;
double expNum=0.00001;
double result=0.0;
for (double i=0;i<NUM_ITERATIONS;++i)
{
result+=exp(expNum); // <-- The code of interest is here
expNum+=0.00001;
}
// To prevent the above from getting optimized out...
std::cout << result << '\n';
}
Run Code Online (Sandbox Code Playgroud)
我正在使用以下开关进行构建:
/Zi /nologo /W3 /WX-
/Ox /Ob2 /Oi /Ot /Oy /GL /D "WIN32" /D "NDEBUG"
/D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /Gm-
/EHsc /GS /Gy /arch:SSE2 /fp:fast /Zc:wchar_t /Zc:forScope …Run Code Online (Sandbox Code Playgroud) c++ visual-studio-2010 intrinsics visual-c++ visual-c++-2010
我已经设置了buildbot来编译带有/ analyze标志的Qt/C++应用程序.
然而,分析也在深入探讨我不关心的qt标题:
c:\qt\qt-everywhere-opensource-src-4.8.1\src\corelib\tools\qvector.h(547) : warning C6011: Dereferencing NULL pointer 'x.p': Lines: 474, 475, 476, 477, 478, 480, 491, 493, 497, 498, 499, 500, 503, 504, 518, 519, 520, 521, 522, 525, 545, 547
Run Code Online (Sandbox Code Playgroud)
什么是最好的方法来排除这些文件?
(请注意我没有使用IDE,我正在寻找命令行,切换或代码更改)
我最近将一个中型Visual Studio 2005解决方案转换为Visual Studio 2010.其中一个项目包含的文件不是C/C++文件,而是使用运行自定义构建工具的批处理文件进行编译.自定义生成步骤的输出是一些C++文件,必须在此之后编译.
相关文件的属性中的自定义生成步骤的输出正确设置为生成的C++文件.
问题是,有时VS2010尝试在使用自定义构建步骤的文件之前编译生成的C++文件,这意味着在干净的构建中它无法找到C++文件并失败.如果我最终尝试构建几次,它将编译自定义文件,然后构建将成功,但这显然不是自动构建的好解决方案.
在VS2005中,构建此项目没有问题,但VS2010无法从自定义构建步骤的输出中确定正确的编译顺序.还有另一种方法可以在VS2010中强制执行正确的编译顺序吗?
我正在尝试编译我的程序但它根本不会链接.我已经指定了boost lib文件的路径,链接器仍然抱怨.这是我得到的链接错误:
1>Edproj.obj : error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::system_category(void)" (?system_category@system@boost@@YAABVerror_category@12@XZ)
1>Edproj.obj : error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::generic_category(void)" (?generic_category@system@boost@@YAABVerror_category@12@XZ)
1>Edproj.obj : error LNK2001: unresolved external symbol "public: virtual __thiscall boost::detail::thread_data_base::~thread_data_base(void)" (??1thread_data_base@detail@boost@@UAE@XZ)
1>Edproj.obj : error LNK2001: unresolved external symbol "void __cdecl boost::throw_exception(class std::exception const &)" (?throw_exception@boost@@YAXABVexception@std@@@Z)
1>Edproj.obj : error LNK2001: unresolved external symbol "public: void __thiscall boost::thread::detach(void)" (?detach@thread@boost@@QAEXXZ)
1>Edproj.obj : error LNK2001: unresolved external symbol "public: void __thiscall boost::thread::join(void)" (?join@thread@boost@@QAEXXZ) …Run Code Online (Sandbox Code Playgroud) visual-c++-2010 ×10
c++ ×8
visual-c++ ×5
c++11 ×2
boost-thread ×1
intrinsics ×1
openssl ×1
public ×1
qt ×1
templates ×1