标签: visual-c++-2010

如何在64位C++代码中使用暂停汇编指令?

由于VC++ 2010在64位代码中不支持内联汇编,因此如何在代码中获取pausex86-64指令?像有许多其他常见的汇编指令(例如,似乎没有成为一个内在此__rdtsc(),__cpuid()等...).

在为什么一面,我希望在指令帮助忙等待的使用情况,从而使(超线程)的CPU可用来上运行的其他线程CPU说(见:成效分析在intel.com).该pause指令对于此用例以及自旋锁实现非常有用,我无法理解为什么MS不将其作为内在包含.

谢谢

visual-c++ visual-c++-2010

12
推荐指数
2
解决办法
4472
查看次数

OpenSSL:无法在VC++ 2010中构建

我已经下载了最新的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项目文件?

c++ openssl visual-c++-2010

11
推荐指数
2
解决办法
6801
查看次数

在派生类中访问成员变量的地址.当成员具有不同的访问说明符时,行为会发生变化

我有一个基类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)

c++ public visual-c++ visual-c++-2010 c++11

11
推荐指数
1
解决办法
1322
查看次数

依赖的非类型模板参数

考虑以下课程:

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)

c++ templates visual-c++-2010

10
推荐指数
1
解决办法
1890
查看次数

在VC 2010中禁用C++ 0x功能?

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

10
推荐指数
1
解决办法
2847
查看次数

检测到'_ITERATOR_DEBUG_LEVEL'不匹配:值'0'与值'2'不匹配

使用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并不重要.几乎没有第三方库提供不同的调试和发布版本.供应商如何避免这个问题呢?

有没有人知道究竟是什么原因导致这种链接依赖,以及如何完全禁用它,或将其从我的代码中分解出来?

c++ linker-errors visual-c++-2010

10
推荐指数
1
解决办法
2万
查看次数

如何在x64代码中获取exp()函数的内在函数?

我有以下代码,并期望使用函数的内在版本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

9
推荐指数
1
解决办法
2589
查看次数

如何从Visual Studio静态代码分析中排除库头?

我已经设置了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,我正在寻找命令行,切换或代码更改)

c++ qt static-analysis visual-c++ visual-c++-2010

9
推荐指数
1
解决办法
3154
查看次数

Visual Studio 2010使用批处理文件自定义编译

我最近将一个中型Visual Studio 2005解决方案转换为Visual Studio 2010.其中一个项目包含的文件不是C/C++文件,而是使用运行自定义构建工具的批处理文件进行编译.自定义生成步骤的输出是一些C++文件,必须在此之后编译.

相关文件的属性中的自定义生成步骤的输出正确设置为生成的C++文件.

问题是,有时VS2010尝试在使用自定义构建步骤的文件之前编译生成的C++文件,这意味着在干净的构建中它无法找到C++文件并失败.如果我最终尝试构建几次,它将编译自定义文件,然后构建将成功,但这显然不是自动构建的好解决方案.

在VS2005中,构建此项目没有问题,但VS2010无法从自定义构建步骤的输出中确定正确的编译顺序.还有另一种方法可以在VS2010中强制执行正确的编译顺序吗?

visual-studio-2010 visual-c++-2010

9
推荐指数
1
解决办法
3601
查看次数

试图链接Boost 1.52线程

我正在尝试编译我的程序但它根本不会链接.我已经指定了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)

c++ compiler-errors boost-thread visual-c++ visual-c++-2010

9
推荐指数
1
解决办法
8113
查看次数