草庐IT

c++ - 获取调用者的返回地址

我想弄清楚如何在MSVC中获取调用者的返回地址。我可以使用_ReturnAddress()来获取函数的返回地址,但我似乎无法找到获取调用方地址的方法。我试过使用CaptureStackBackTrace,但出于某种原因,它在多次调用后崩溃了。我也更喜欢通过内联汇编的解决方案。voidmy_function(){cout输出:caller_function的返回地址:0x15AFA70 最佳答案 在Windows中,您可以使用RtlCaptureStackBackTrace或RtlWalkFrameChain来安全执行此操作,而无需依

c++ - 什么时候 sizeof(myPOD) 太大而无法在 x64 上按值传递?

我预计对于最大8字节的结构没有什么不同,但是更大的POD类型呢?当类型的大小超过机器字大小时,按值传递是否会变得更昂贵,或者是否有其他因素(如缓存行大小)会影响性能?我主要对x64感兴趣,但也可以随意包含一些x86的数字。说明:我可能想得太狭隘了,因为我不知道在其中发挥作用的所有因素(寄存器、调用约定、编译器优化)。我主要对Microsoft的C++编译器感兴趣,它只使用__fastcall。我感兴趣的是,在了解架构、类型大小、缓存大小等参数传递方面,是否有任何一般性建议。例如:“当类型小于N字节时,最好按值传递类型。“其中N是可以从我们已知的事物中推导出来的事物。

c++ - 模板构建错误 : Undefined symbols for architecture x86_64:

我正在尝试使用一个模板类,当我在LWS中将它编译到一个文件中时,它起作用了:(链接失效)~http://liveworkspace.org/code/a9c412a7e683439dfa35a9363749369d~但是当我尝试编译它由3个文件组成时,stack.h第4到21行stack.cpp第24到48行main.cpp第49行到结束当我尝试编译这3个文件时,我得到了Undefinedsymbolsforarchitecturex86_64:"Stack2,std::allocator>>::push(Node**,std::basic_string,std::allocator>

c++ - LNK1112 : module machine type 'x64' conflicts with target machine type 'X86' : Qt creator

我有一个在linux上运行的应用程序,我正试图将其导入到windows上。我已经设置了所有库并对.pro文件进行了更改。现在,当我尝试构建项目时出现此错误:error:LNK1112:modulemachinetype'x64'conflictswithtargetmachinetype'X86'我不确定是什么导致了这个问题。我正在使用32位Qtcreator。我知道有几个链接讨论了更改项目属性,但所有这些都与在VisualStudio中更改它们有关。我正在使用Qtcreator并通过QtUI运行项目。所以我不确定如果必须解决这个问题,必须通过Qt对项目属性进行哪些更改。

c++ - 在 C/C++ 中的特定地址边界上对齐内存是否仍能提高 x86 性能?

许多低延迟开发指南讨论了在特定地址边界上对齐内存分配:https://github.com/real-logic/simple-binary-encoding/wiki/Design-Principles#word-aligned-accesshttp://www.alexonlinux.com/aligned-vs-unaligned-memory-access但是,第二个链接是2008年的。在地址边界上对齐内存是否仍然在2019年为IntelCPU提供性能提升?我认为英特尔CPU不再会因访问未对齐的地址而导致延迟损失?如果不是,在什么情况下应该这样做?我应该对齐每个堆栈变量吗?类成

反应:android:在x86上建造并在手臂上进行测试

运行ARM模拟器x86系统非常慢。我正在建造一个react-native应用程序,想知道测试所有CPU类型的重要性,或者可以自信地测试x86并期望ARM设备运行良好?我知道可能仍然存在与不同的AndroidAPI有关的问题。看答案我为我工作了。在包装详细信息中,有一个X86选项。我安装了它,它恢复了正常。它会尽快编译,而模拟器也不会落后。请参阅图片中的最后一个复选框。我真的希望它有帮助。

c++ - 缺少用于 LLVM 编译器-rt 的 libclang_rt.san-x86_64.a 文件

我刚刚构建了LLVM/Clangcompiler-rt并尝试了-fsanitize选项。但奇怪的是链接失败了,因为它找不到libclang_rt.san-x86_64.a。/usr/bin/ld:cannotfind/home/hongxu/RESEARCH/llvm-git/obj/bin/../lib/clang/3.7.0/lib/linux/libclang_rt.san-x86_64.a:Nosuchfileordirectoryclang-3.7:error:linkercommandfailedwithexitcode1(use-vtoseeinvocation)当我进入

c++ - 英特尔®事务同步扩展新指令(TSX-NI)与英特尔TSX有区别吗?

我在英特尔页面上找到了https://ark.intel.com/products/97123/Intel-Core-i5-7500-Processor-6M-Cache-up-to-3_80-GHz该处理器支持TSX-NI技术,但我在Google上找不到有关它的任何信息。是否与IntelTSX相同?如果有区别,那么我该如何使用它。对不起,我的英语不好!:) 最佳答案 似乎只是一种营销手段。在Internet上,Intel手册或IntelISA扩展手册中都找不到“TSX-NI”的引用。引用英特尔[1]IntelTransaction

c++ - 使用 __m256d 寄存器

你如何使用__m256d?假设我想使用IntelAVX指令_mm256_add_pd在具有3-64位double精度组件(x、y和)的简单Vector3类上z).正确的使用方法是什么?由于x、y和z是Vector3类的成员,_我可以在union中使用__m256d变量声明它们吗?unionVector3{struct{doublex,y,z;};__m256d_register;//theIntelregister?};那我可以走了吗Vector3add(constVector3&o){Vector3result;result._register=_mm256_add_pd(_regi

c++ - block 内变量的生命周期是多少?

Here和Here我发现block中的变量是在执行到该block时创建的,为了证明我试过这个:intmain(){{chara;printf("Addressofa%d\n",&a);}charb;printf("Addressofb%d\n",&b);}正如预期的那样,b首先被创建(因为外部block比内部block执行得更快),当执行到内部block时,a被创建。上述代码的输出:Addressofa2686766Addressofb2686767(在x86上测试(堆栈向下增长,因此首先创建具有更大地址的变量))。但是这个呢?intmain(){{chara;printf("Addr