jjzjj

fno-rtti

全部标签

xml - 将 Delphi 对象树序列化为 XML 的好方法是什么——使用 RTTI 而不是自定义代码?

将Delphi对象树序列化为XML的好方法是什么——使用RTTI而不是自定义代码?我很想发现此功能已经内置到Delphi中,但似乎并没有。我发现了一些似乎可以执行此功能的组件(已在下方发布)。您使用过其中任何一个或其他产品吗?你自己建的吗?我在Delphi中遗漏了什么明显的东西吗? 最佳答案 您可以使用JVCLTJvAppXMLFileStorage组件来序列化TPersistent派生类。usesJvAppXMLStorage;varStorage:TJvAppXMLFileStorage;beginStorage:=TJvApp

windows - cl.exe 标志或设置以在/O1 或更高级别禁用尾调用优化(相当于 gcc -fno-optimize-sibling-calls)

我从事一个项目,我们维护自己的堆栈爬虫(出于各种原因)。我们需要能够以一定的可靠性抓取堆栈。目前我们遇到了一个问题,函数尾部调用了我们感兴趣的函数,并且我们的堆栈跟踪跳过了调试构建(/Od)中会出现的帧。我们已经禁用了帧指针优化和内联(/Oy-和/Ob0),因此我们可以获得更好的堆栈跟踪,但我们仍然希望能够启用一些优化(/O1)以使代码更快。但是,尾调用仍然会干扰我们的堆栈跟踪。是否有任何标志或设置可以在MSVC中禁用此优化?gcc有-f(no-)optimize-sibling-calls,涵盖了这一点。 最佳答案 不,您可以将尾

windows - 可执行文件中的 RTTI 元数据存储在哪里?

我正在查看RTTI的文档其中说:IfRTTIgenerationisenabled,theresultingbinaryincludesspecialmetadatathatcontainsinformationabouttypes(forexample,classancestry,declaredfields,annotatedattributes).RTTI元数据存储在PE文件中的什么位置,它具有什么结构? 最佳答案 WindowsPE文件没有存储RTTI的标准部分,其格式和存储位置完全取决于编译器供应商。即使它没有指定存储格式

java - Java中RTTI和反射的区别

我的问题是类信息在运行时何时加载?当有人调用instanceof时,这算是RTTI还是反射?还是视实际情况而定? 最佳答案 术语“RTTI”是一个特定于C++的术语,指的是允许程序在运行时确定各种对象的动态类型的核心语言的功能。它通常是指dynamic_cast或typeid运算符,以及由typeid生成的相关联的std::type_info对象.另一方面,术语反射是跨编程语言使用的通用术语,指的是程序在运行时检查和修改其对象、类型等的能力。我听说应用于instanceof的术语是typeintrospection和instance

C++之RTTI实现原理

相关系列文章C++无锁队列的原理与实现如何写出高质量的函数?快来学习这些coding技巧从C++容器中获取存储数据的类型C++之多层if-else-if结构优化(一)C++之多层if-else-if结构优化(二)C++之多层if-else-if结构优化(三)C++之Pimpl惯用法C++之RTTI实现原理目录1.引言2.typeid2.1.虚函数表(vtable)2.2.类型信息(type_info)3.dynamic_cast4.缺陷5.一些库/软件提供的RTTI实现5.1. CATIA的RTTI5.2. QT的RTTI5.3. FreeCAD的RTTI6.实例7.总结1.引言       

c++ - C++ 中的 RTTI 和可移植性

如果编译器不“支持”RTTI,是否意味着编译器无法处理其中包含虚函数的类层次结构?还是我误解了有关RTTI不可移植的文献,而问题出在其他地方?谢谢大家的评论! 最佳答案 这可能更像是您正在寻找的答案,但这里是:RTTIisnot"portable"意味着如果你使用编译器A构建动态库A,并使用编译器B构建与A链接的应用程序B,那么你不能使用RTTI,因为编译器a和b的RTTI实现是不同的。虚函数受到影响只是因为虚函数机制也可能不是二进制兼容的。这个问题在90年代中期非常重要,但现在已经过时了。并不是因为编译器现在都变得相互二进制兼容,

c++ - Itanium 和 MSVC ABI 中跨模块边界的 RTTI

我正在阅读ItaniumABI上面写着Itisintendedthattwotype_infopointerspointtoequivalenttypedescriptionsifandonlyifthepointersareequal.Animplementationmustsatisfythisconstraint,e.g.byusingsymbolpreemption,COMDATsections,orothermechanisms.有谁知道在使用动态加载库时如何在流行平台(例如使用GCC和GNUbinutils的Linux)上实际实现这一点的详细信息?它有多可靠?此外,我的印象

c++ - 如何使用 Cygwin 打开 RTTI?

编译我的AndroidNDKC++原生代码时,出现如下错误:error:'dynamic_cast'notpermittedwith-fno-rtti有人告诉我打开RTTI,但我不知道该怎么做。我需要修改Application.mk还是什么?我的Application.mk:#itisneededforndk-r5APP_STL:=stlport_staticAPP_ABI:=armeabiarmeabi-v7aAPP_MODULES:=cocos2dcocosdenshionchipmunkbox2dtempestkeep当我在某些.o文件中添加APP_CPPFLAGS+=-frtt

c++ - 有没有办法直接在 C++ 中访问 RTTI 以改进虚拟调用中的分支预测?

所以我正在创建一个库,其中包含一个类someBase{};这将由下游用户在许多类中派生。classsomeBase{public:virtualvoidfoo()=0;};我还有一个指向someBase的指针vector,我正在这样做:-vectorchildren;//downstreamusercodepopulateschildrenwithsomeobjectsoverherefor(i=0;ifoo();现在分析表明,对虚拟调用的分支预测错误是我代码中的(几个)瓶颈之一。我想要做的是以某种方式访问​​对象的RTTI,并使用它根据类类型对子vector进行排序,以改进指令缓存局

c++ - vftable[0] 存储的是第一个虚函数还是 RTTI Complete Object Locator?

我们都知道C++使用vftable来动态决定应该调用哪个虚函数。而我想弄清楚我们调用虚函数时背后的机制。我已将以下代码编译为程序集。usingnamespacestd;classAnimal{intage;public:virtualvoidspeak(){}virtualvoidwash(){}};classCat:publicAnimal{public:virtualvoidspeak(){}virtualvoidwash(){}};voidmain(){Animal*animal=newCat;animal->speak();animal->wash();}汇编代码非常庞大。我不