草庐IT

x86-emulation

全部标签

c++ - 在 x86-64 中访问 32 位整数数组是否存在性能损失?

对不起,如果这个问题听起来很愚蠢。我只是模糊地认识到数据对齐问题,并且从未进行过任何64位编程。我现在正在处理一些32位x86代码。它经常访问一个int数组。有时会读取一个32位整数。有时会阅读两个或更多。在某些时候,我想将代码设为64位。我不确定是否应该将此int数组声明为int或longint。我宁愿保持整数的宽度相同,所以我不必担心差异。我有点担心读取/写入与自然词不对齐的地址可能会很慢。 最佳答案 仅当加载或存储越过对齐边界时才会发生未对齐惩罚。边界通常是以下较小者:硬件的自然字长。(32位或64位*)数据类型的大小。如果您

c++ - *** 没有规则使目标 'class.cpp' 需要 `build/....x86/class.o` 停止。 Ubuntu 中的错误

我在尝试构建和编译我的程序时遇到了这个错误。现在我无法在程序中打开所有.cpp文件。make[2]:*NoruletomaketargetChecker.cpp',neededbybuild/Debug/GNU-Linux-x86/Checker.o'.Stop.谁能帮我解决这个问题?我检查了所有在线资源,但似乎找不到解决方案。我迫切需要解决这个问题。感谢您提供的任何帮助。 最佳答案 如果此处没有要制作的文件(Checker.cpp),则会出现此错误。大概有以下几个原因:你的当前目录不是你的文件所在的目录居住。文件可能已移至其他地方

c++ - x86_64 上 2 的快速浮点幂

有没有快速取2.0的方法达到某种浮点程度x?我的意思是比pow(2.0,x)更快的东西最好使用AVX2进行矢量化处理。整数对应的是1,但它适用于整数n仅。 最佳答案 有一个标准std::exp2(doublen)Computes2raisedtothegivenpowern在特定环境下exp2(x)可能不会比pow(2.0,x)快,但它比一般的pow更具体。 关于c++-x86_64上2的快速浮点幂,我们在StackOverflow上找到一个类似的问题: ht

c++ - 导致除法溢出错误 (x86)

我有几个关于x86或x86_64架构上的除法溢出错误的问题。最近我一直在阅读有关整数溢出的内容。通常,当算术运算导致整数溢出时,会设置FLAGS寄存器中的进位位或溢出位。但显然,根据thisarticle,除法运算产生的溢出不会设置溢出位,而是触发硬件异常,类似于除以零时。现在,除法导致的整数溢出比乘法要少得多。只有几种方法可以触发除法溢出。一种方法是做类似的事情:int16_ta=-32768;int16_tb=-1;int16_tc=a/b;在这种情况下,由于有符号整数的补码表示,不能在16位有符号整数中表示正数32768,所以除法运算溢出,导致错误值为-32768。几个问题:1)

c++ - 体系结构 x86_64 : for caffe build 的 undefined symbol

我收到caffe的错误build。我该如何解决?我使用的是MacOSXYosemite10.10.1。控制台日志Machida-no-MacBook-Air:caffemachidahiroaki$/usr/bin/clang++-shared-o.build_release/lib/libcaffe.so.build_release/src/caffe/proto/caffe.pb.o.build_release/src/caffe/proto/caffe_pretty_print.pb.o.build_release/src/caffe/blob.o.build_release/s

c++ - 无法解析的 `R_X86_64_NONE` 重定位

我正在使用Devtoolset-7在CentOS7上构建了Boost1.65.1w/它。但是当我链接我的应用程序时,我得到了以下信息:/opt/rh/devtoolset-7/root/usr/libexec/gcc/x86_64-redhat-linux/7/ld:/opt/rh/devtoolset-7/root/usr/lib64/libboost_unit_test_framework.a(compiler_log_formatter.o)(.text._ZN5boost9unit_test5utils11string_castINS0_13basic_cstringIKcEE

c++ - Borland x86 内联汇编程序;获取标签的地址?

我正在使用带有一些内联汇编程序代码的BorlandTurboC++,因此大概是TurboAssembler(TASM)风格的汇编代码。我希望执行以下操作:voidfoo::bar(void){__asm{moveax,SomeLabel//...}//...SomeLabel://...}所以SomeLabel的地址被放到了EAX中。这不起作用,编译器会提示:undefinedsymbol“SomeLabel”。在MicrosoftAssembler(MASM)中,美元符号($)用作当前位置计数器,这对我的目的很有用。但这在BorlandsAssember中似乎也不起作用(表达式语法错

c++ - 缺少 vc_runtimeminimum_x86.msi 并且无法安装

我目前正在完成VisualStudio2017CommunityEdition与C++一起使用的安装过程。安装到一半,出现错误提示"Thefeatureyouaretryingtouseisonanetworkresourcethatisunavailable.ClickOKtotryagain,orenteranalternatepathtoafoldercontainingtheinstallationpackage'vc_runtimeMinimum_x86.msi'intheboxbelow."如果我点击取消,程序会继续,最后会告诉我设置失败。它给了我附在这篇文章底部的错误日志

x86-64 : when are structs/classes passed and returned in registers? 上的 C++

假设Linux上的x86-64ABI,在C++中的什么条件下,结构传递给函数是在寄存器中还是在堆栈中?在什么情况下它们会返回到寄存器中?类(class)的答案会改变吗?如果它有助于简化答案,您可以假设一个参数/返回值并且没有浮点值。 最佳答案 ABI规范定义here.有更新版本可用here.我假设读者已经习惯了文档的术语,并且他们可以对基本类型进行分类。如果对象大小大于两个八字节,则在内存中传递:structfoo{unsignedlonglonga;unsignedlonglongb;unsignedlonglongc;//Com

C++ 错误 : Undefined symbols for architecture x86_64

我正在尝试学习C++并试图解决一个问题,其中给定了一些步骤和您可以爬上这些步骤的可能方法的数量,给出了您可以爬上这些步骤的可能方法的所有排列.因此,例如,如果要爬5步,我可以一次向上移动1步、一次2步或一次3步,我需要打印出1、2和3的所有排列加起来为5:[1,1,1,1,1],[1,1,1,2],....我从这段代码开始(还没有完成),但我得到了这个错误:Undefinedsymbolsforarchitecturex86_64:"_num_steps(int,std::__1::vector>,std::__1::vector>,std::__1::allocator>>>,std