草庐IT

syswow64

全部标签

c++跨平台方式定义64位无符号整数

现在我正在从事一个项目,该项目在代码的许多部分中广泛使用64位无符号整数。到目前为止,我们只使用gcc4.6进行编译,但我们现在正在将一些代码移植到Windows。至关重要的是,这些无符号整数是64位宽的。有人建议我们可以使用longlong但如果longlong恰好大于64位就不好了,我们实际上想保证它是64位并编写类似static_assert(sizeof(longlong)==8)好像有点代码味。定义像uint64这样的东西的最佳方法是什么,它可以跨gcc和msvc编译,而无需在所有地方使用不同的代码语法? 最佳答案 如何包

c++ - 设置 int64_t 中的所有位

在下面的代码中,我希望将x中的所有位设置为1,但不知何故只设置了前32位:int64_tx=0xFFFFFFFF;x注意:在每行之后打印x会产生4294967295(低32位设置为1)。另外,尝试使用numeric_limits::min()没有成功。我的问题是如何设置x中的所有位?使用RHEL5.5。谢谢 最佳答案 x计算移位x的结果剩下32位并且对值不做任何操作。你想使用x相反。 关于c++-设置int64_t中的所有位,我们在StackOverflow上找到一个类似的问题:

c++ - 将 uint64_t 转换为 double 后出现意外结果

在下面的代码中:#include...uint64_tt1=1510763846;uint64_tt2=1510763847;doubled1=(double)t1;doubled2=(double)t2;//d1==t2=>evaluatestotruesomehow?//t1==d2=>evaluatestotruesomehow?//d1==d2=>evaluatestotruesomehow?//t1==t2=>evaluatestofalse,ofcourse.std::cout我得到这个输出:uint64_t:1510763846,1510763847,double:151

c++ - 是否存在用于将 C++ 代码移植到 64 位的自动转换工具?

我正在研究将大量(>1000万行)C++代码移植到64位的方法。我研究了静态代码分析器和编译器标志,现在我正在研究可以进行常见、重复更改的宏或其他工具。我已经编写了一些正则表达式以查看它们在实践中的工作情况,正如预期的那样,它们非常有效。也就是说,首先构建表达式需要一些时间,所以我想看看是否有此类表达式的列表或可以自动执行更改的软件工具。以下几行是要匹配和修复的代码的原型(prototype)示例。(需要澄清的是,这些行并不意味着代表单个代码块,而是从不同地方提取的行。)inti=0;longobjcount;intcount=channels.count(ch);for(intk=0

c++ - 尽管使用 -fPIC 进行编译,但链接器错误 "relocation R_X86_64_PC32 against undefined symbol"

我正在使用命令行编译一个c++程序g++-cprog.cc-std=c++11-march=native-fPIC-fopenmp然后尝试通过创建一个共享对象g++prog.o-shared-fopenmp-olib/libprog.so这一直有效。但是今天我得到:/usr/bin/ld:prog.o:relocationR_X86_64_PC32againstundefinedsymbol`_ZTVN12_GLOBAL__N_111handle_baseE'cannotbeusedwhenmakingasharedobject;recompilewith-fPIC/usr/bin/l

c++ - 如何拦截64位进程中的API方法调用?

背景我正在开发一个遗留产品,它可以通过注入(inject)dll成功拦截被注入(inject)进程试图进入任意dll的任意方法调用。特别是gdi32.dll库。不幸的是,当它嵌入到64位应用程序中时它不起作用。它成为一个热门话题,是时候升级它的功能了。同样不幸的是,源代码中没有评论(典型的>:-在搜索互联网后,我发现了this英特尔员工的文章。如果我们的源代码没有比这篇文章早大约7年,我会说这正是我们的NoComments开发人员学会执行API方法拦截的地方。这就是程序的相似之处。这篇文章也总结在一个很好的pdf(InterceptingSystemAPIcalls)中,也可以从上述网

c++ - LZ4 压缩的源代码是否兼容 64 位?

我刚刚下载了LZ4-HC压缩源并检查了它的64位兼容性。我收到的警告很少“从‘__int64’到‘unsignedint’的转换,可能会丢失数据”当我继续挖掘时,我注意到宏ADD_HASH(p)。该宏的最后一部分是HashTable[HASH_VALUE(p)]=(p)-base;p-constBYTE*base-constBYTE*constfor64-bit.(constintb-for32-bit)HTYPEHashTable[];HTYPEisU32for64-bitplatform(constBYTE*-for32-bit)32位发生了什么——我们从指针中减去constint

c++ - 有没有人能够在使用共享 DLL 的 Windows 64 位应用程序上集成 tcmalloc?

我有一个64位VisualStudio2010(单线程)C++Windows应用程序,我试图将它与tcmalloc集成,但在使用任何动态链接的dll时遇到问题。我将tcmalloc链接为静态库。在应用程序开始使用我们共享的dll之一之前,tcmalloc工作得很好。我将解决方案构建为64位DEBUG应用程序。所有dll与CRT库的C/C++调试版本(MSVCP100D.dll和MVCR100D.dll)的链接。下面是失败的代码示例。tcmalloc被调用用于所有内存分配,但是当调用delete时应用程序崩溃。当我在主可执行文件中创建一个函数并将代码复制到那里时,完全相同的代码工作正常,

c++ - 尝试(但失败)在 Windows 10 的 64 位 Ubuntu 上运行 Hello World 32 位 C++ 程序

我通过以下方式从头开始在Windows10上配置了我的新Ubuntu:#apt-getupdate#apt-getinstallbuild-essential##Amabletocompilenowusing"g++-Wall-oHello-WorldHello-World.cpp",thebinaryisworking.##Tocheckversions,andthatbothpackageswereindeedinstalled#gcc-v#make-v#apt-getinstallg++-multilib##Thisalsoinstallsgcc-multilibasadepen

c++ - boost::date_time (boost-145) 使用带有微秒计算的 64 位 uint,没有截断

我正在使用date_time来抽象掉平台特性。我需要生成一个64位微秒分辨率uint64_t,它将用于序列化。我不明白下面出了什么问题。#include#include#includeusingnamespaceboost::posix_time;usingboost::uint64_t;ptimeUNIX_EPOCH(boost::gregorian::date(1970,1,1));intmain(){ptimecurrent_time=microsec_clock::universal_time();std::cout这是我得到的输出。originaltime:2010-Dec-